07 知识点梳理:算法数据结构
01 时间复杂度与空间复杂度
我们衡量算法的优劣主要通过两个维度
时间``空间,而这两个维度对应的就是时间复杂度``空间复杂度. 但鱼和熊掌不可兼得,我们只能在这两者间取得一个合适的平衡点
1.时间复杂度
算法所需要的时间工作量
标记公式
T(n) = O(n)
常见的时间复杂度量级
a.常数阶O(1)
int i = 1;
int j = 2;
++i;
j++;
int m = i + j;b.线性阶O(n)
for(i=1; i<=n; ++i)
{
j = i;
j++;
}c.对数阶O(logN)
以2为底
d.线性对数阶(nlogN)
e.平方阶(n²)
如果把一层循环的n改成m,时间复杂度就成了 O(m*n)
f.立方阶O(n³)、K次方阶O(n^k)
参考的O(n²),O(n³)相当于三层n循环
2.空间复杂度
算法在运算中临时占用的控件的大小
标记公式
S(n) = O(n)
常见的空间复杂度量级
a. O(1)
如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
b. O(n)
这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)
02 排序题
这里简单的说下几种快速排序的不同之处,随机快排,是为了解决在近似有序的情况下,时间复杂度会退化为O(n^2),双路快排是为了解决快速排序在大量数据重复的情况下,时间复杂度会退化为O(n^2),三路快排是在大量数据重复的情况下,对双路快排的一种优化。
冒泡排序
选择排序
插入排序
快速排序
随机快排
双路快排
三路快排
Last updated
Was this helpful?