算法学习(第一天)

1.时间复杂度(忽略系数和低阶项)c为比较代价,为常数

例:排序(将n个数按从小到大的顺序进行排序)

思想:先遍历n个数,将n个数中最小的数与第0位的数互换,然后依次进行,直至排序完成。

0             n*c

1             n-1*c

。             。

。             。

n-1           1*c

将后面的遍历次数相加为(n+(n-1)+..+1)*c

设和(an*n+b*n+k)*c,则时间复杂度为最高阶项的阶数,即O(n*n)

例:设有一有序数组A,和有序数组B,A中有n个数,B中有m个数,现需找到两数组的公共部分,求时间复杂度

方法1:将A中的每一个数依次在B中遍历,时间复杂度为O(n*m)

方法2:在A中依次取数,并在B中二分查找,时间复杂度为O(n*log2(m))

方法3:若A,B中都没有重复值,则可以分别在A,B中第0为各设置一指针,将两数相比,若两数不等,数值小的指针向后移动一位。若两数相等,输出值,且A,B指针各向后移动一位,时间复杂度为O(n+m)

2.空间复杂度(所需额外空间的大小)

例:若有一数组为[1,2,3,4,5,6,7],先需将[6,7]移至数组头部

方法1:创建一个新的数组,先将[6,7]复制到新数组内,再将[1,2,3,4,5]复制到新数组内,最后整体赋值,将新数组赋给旧数组,空间复杂度为0(7)

方法2:先将[1,2,3,4,5]逆序,再将[6,7]逆序,最后整体逆序,空间复杂度O(1)

3.最优解(无特殊声明的情况下,先满足时间复杂度最优的最小空间)

猜你喜欢

转载自blog.csdn.net/qq_41481924/article/details/81036902