按其最大元素排序k排序列表

时间:2017-09-27 10:56:47

标签: algorithm sorting time-complexity big-o mergesort

如果我已经对单个链表进行了排序并按每个列表的最大元素(列表中的最后一个)对它们进行排序(mergesort),那么大O(运行时间/时间复杂度)会是多少?假设列表1~k具有不同的大小:n_1~n_k。我在考虑O(k * log(MAX(n_1~n_k)))但不确定我是如何或为何选择这种思路。

1 个答案:

答案 0 :(得分:2)

假设你有O(k)单位的内存来存储每个列表的最大元素,合并排序列表本身的时间,即没有合并它们的元素,将是O(sum(N i )+ k * log k)。

第一个术语是因为你需要导航到每个列表的末尾一次;之后,您可以使用其最大值“标记”列表,并对标记列表执行合并排序。第二个术语来自使用合并排序对k项进行排序。原始列表被排序的事实变得无关紧要,因为无论如何你都需要遍历整个列表。

如果列表是可修改的,即使没有额外的存储,时序复杂性也会保持不变,因为您可以反转列表,对它们进行排序,然后再将它们反转。反转列表需要O(sum(N i )),因此时间复杂度将保持不变。