最近我从Introduction To Algorithms Edition 3
偶然发现了这个问题问题2-1:
尽管合并排序在O(n logn)
最坏情况时间运行,插入排序在O(n^2)
中运行,但后者运行速度更快,适用于小问题规模。考虑对合并排序的修改,其中使用插入排序对 n / k 长度 k 的子列表进行排序,然后使用标准合并机制进行合并。
(A)显示插入排序可以在O(nk)
最坏情况时间内对长度为k的n / k个子列表进行排序。
答案是:
Ans:在最坏的情况下,插入排序每个k元素列表需要(k ^ 2)个时间。因此, 排序n / k k个元素列表每个(k ^ 2 n / k)=(nk)最坏情况时间
他们如何从给定数据中得到(k ^ 2 n / k)?我根本不理解这一点,并且非常感谢你的解释。
答案 0 :(得分:2)
子列表的长度为k,因此每个子列表的插入排序需要k^2
。现在,总共有n/k
个子列表,因此,n/k
* k^2
为nk
。这里的关键理解是,有n/k
个子列表,插入排序需要k^2
时间对每个子列表进行排序。
另外需要注意的是,知道合并排序有O(n logn)
对这个问题实际上并不重要,因为他们没有要求整理整个列表的时间,只是排序时间所有的子列表。