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?