算法和数据结构(概述) - 概述

算法和数据结构概述

什么是算法

  1. 大家小时候听过的关于1+2+3+4+5+…+10000的故事。高斯用一个公式很快就将他算了出来,这就是算法。
  2. 定义:一系列程序指令,用于解决某一类问题的公式和思想
  3. 算法有简单的,有复杂的
    • 简单:找出一组数中的某个数
    • 复杂:一个城市到另一个城市的最短路径
  4. 算法有高效的,也有低效的
    • 如高斯的公式是高效的,而慢慢加是低效的
    • 衡量标准:时间复杂度和空间复杂度
  5. 应用领域
    • 运算:找两个数的最大公约数,两个大树相加
    • 查找:查找某个数
    • 排序:信息显示有很多需要排好序
    • 最优决策:找到最优路径

什么是数据结构

数据结构(data structure):数据的组织、管理和存储格式。其目的是为了高效地访问和修改数据。

数据结构是算法的基石。很重要,一定要掌握好。

数据结构有哪些组织方式呢?

  1. 线性结构:数组,链表,栈,队列,哈希表
  2. 树:二叉树,二叉堆
  3. 其他:从基本数据结构而来,用于解决特定的问题,如跳表,位图等。

时间复杂度

  1. 衡量算法的好坏标准:时间复杂度和空间复杂度(运行时长和占用空间)

  2. 定义:一个算法运行时间长短的度量

  3. 程序的基本操作执行次数,常见的四种方式:线性,对数,常量,多项式

  4. 时间复杂度,大O表示法。

    • 就是把程序的相对执行时间函数T(n) 简化为一个数量级

    • 原则:

      • 如果运行时间是常数量级,则用常数1表示

      • 只保留时间函数中的最高阶项

      • 如果最高阶项存在,则省去最高阶项前面的系数

  5. 时间复杂度很重要,一般来说,比空间复杂度要重要

空间复杂度

  1. 一个算法运行过程中临时占用存储空间大小的度量(有时会根据需要,会存储一些中间数据)

  2. 例子:n个整数中,有两个重复,找出两个重复的整数

    法一:双重循环,遍历数组,不断回顾之前的数,看看有没有相同的。时间复杂度O( n 2 n^2 n2)

    法二:加入中间数据,一个“字典”。key为整数的值,value为整数出现的次数。这个“字典”也叫散列表。

    • 读“字典”时间复杂度为O(1),因此整个算法时间复杂度为O(n),因为只用遍历一次数组
  3. 空间复杂度如何计算:

    • 常量空间:空间大小固定,与输入规模没有直接关系:O(1)

    • 线性空间(如数组):空间是一个线性的集合,且 集合的大小与输入规模n成正比:O(n)

    • 二维空间:空间是二维数组集合,且 集合的长度宽度与输入规模n成正比:O( n 2 n^2 n2)

    • 递归空间:执行时,会专门分配一块内存,来存储“方法调用栈”

      • 入栈:把调用的方法和参数信息压入栈中

      • 出栈:把调用的方法和参数信息从栈中弹出

      • 内存空间和递归深度成正比。递归的深度为n则空间复杂度为O(n)

  4. 取舍好时间和空间

    • 一般来说,时间复杂度更重要一点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值