已知两个长度分别为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. 最好情况举例,1,2和3,5,9。1和3比,头部插1,2和3比,头部插2,短的升序链表全部比完且插入完,剩下的长的链表按顺序头部插入。形成9,5,3,2,1.
  2. 最差情况举例,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是因为最后一个元素不需要再和另一个链表比较了,因为另一个链表已经没元素了。
    而o(n+m-1)=o(m+n),再用上面那个夹逼一下,就是答案了o(max(m,n))了。
    结束,索然无味。

你可能感兴趣的:(笔记)