一、什么是算法
算法:algorithm
数学中:用于解决某一类问题的公式和思想。
计算机中:是一系列程序的指令,用于解决特定的运算和逻辑问题。
二、算法的衡量
1. 时间复杂度
就是执行算法的时间成本。
1.1 由于运行环境和输入规模的影响,代码的绝对执行时间是无法预估的!!!
但是我们可以计算出代码的基本操作的执行次数T(n);
其中:O为算法的渐进时间复杂度,也就是传说中的时间复杂度。
推导出时间复杂度的原则:
① 如果运算时间是常量级的,就用1来表示;
② 只保留函数中的最高项;
③ 如果最高阶存在,就省去前面的系数.
eg. 它的时间复杂度为:
1.2 比较
O(1) < O(log(n)) < O(n) < O(n^2)
1.3 时间复杂度的重要性
随着问题规模的逐渐增加,好坏算法之间的差距将会越明显。
2. 空间复杂度
执行算法的空间成本。
2.1 常见空间复杂度的计算
| 类型 | 空间复杂度 | 举例 |
|---|---|---|
| 常量空间 | O(1) | 算法的存储空间固定,和输入规模没有直接的关系 |
| 线性空间 | O(n) | 当算法分配的空间是一个线性的集合(如:数组),并且集合大小和规模n成正比时 |
| 二维空间 | O(n^2) | 当算法分配的空间时一个二维数组集合,并且集合的长度和宽度都与输入的规模n成正比 |
| 递归空间 | O(n) | 执行递归操作所需要的内存空间和递归的深度成正比。(纯粹的递归操作的空间复杂度也是线性的) |
3. 时间和空间的取舍
由于计算机的运算速度和空间资源是有限的,就比如:一个很有钱的人是不会为每日吃多少钱的饭而烦恼,只有没钱的人才会每天精打细算。而现如今,计算机的CPU处理速度不断飙升,内存和硬盘空间也越来越大,那么我们在多数时候,更希望牺牲空间来换取时间,来提高程序的执行速度。
三、什么是数据结构
数据结构: data structure 数据结构是数据的组织、管理和存储格式,目的是为了更高效地访问和修改数据