一、时间复杂度、空间复杂度:
1.已知两个长度分别为 m 和 n 的升序链表,若将它们合并为一个长度为 m + n 的降序链表,则 最坏情况下的时间复杂度是:
算法实现的本质:两个链表进行比较,其中一个比较完成后,剩下的直接进行插入。
最好的情况:短的表先比较完成。O(min(m, n))
最坏的情况:长的表比较完成。O(max(m, n))
答案证明,用了极限:
O(max(m,n))等价于O(m+n)。
就是m+n>=max(m,n)且m+n<=2max(m,n),三者取量级,所以O(m+n)和O(max(m,n))等价,夹逼定理。最好情况举例:1,2和3,5,9。1和3比,头部插1,2和3比,头部插2,短的升序链表全部比完且插入完,剩下的长的链表按顺序头部插入。形成9,5,3,2,1.
最差情况举例:1,3,5和2,6。头部插入法,12比,先插1,32比,插2,36比,插3,56比,插5,此时长的链表全部比完且都已插入,另一个链表剩下的元素按顺序头部插入即可。形成6,5,3,2,1。一共插入了5个元素,但只比了4次,因为当一个链表已经全部插入完的时候,另一个链表还会剩一个元素或者很多个元素,如13578,26,这里的578最后都会用头插法按序插入,不需要再比较,相当于”1”,这种最坏情况下的时间复杂度其实是o(n+m-1)。这个减1是因为最后一个元素不需要再和另一个链表比较了,因为另一个链表已经没元素了。
2.理解:
在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2^n)的算法。
所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界。
3.计算题:
计算下述代码的时间复杂度:
i=1;
while( i<=n ){
i=i*3;
}
解析:
假设循环次数是x
i = 1, 3, 9, 27, 81 ,i = 3^x
条件是i <= n 即3^x <= n
所以x <=