情况如下: -
我们有n号,我们有印刷品 他们按排序顺序。我们有权访问 平衡字典数据结构, 支持操作搜索, 插入,删除,最小,最大 在O(log n)时间。
我们想要检索数字 使用排序的O(n log n)时间顺序 只有插入和有序 遍历。
答案是: -
Sort()
initialize(t)
while(not EOF)
read(x)
insert(x,t);
Traverse(t);
现在查询是我们在时间“n”中读取元素然后遍历“log n”(按顺序遍历)时间中的元素,然后是该算法的总时间(n + logn)时间,据我说..请解释这个算法对时间计算的跟进。如何在O(nlogn)时间内对列表进行排序?
感谢。
答案 0 :(得分:4)
每个插入都是O(log n)
。您正在进行n
插入,因此可以提供n * O(log n) = O(n log n)
渐近时间复杂度。遍历树是O(n)
,因为有n
个节点。这加起来O(n + n log n)
与O(n log n)
相差一个常数,因此最终的渐近复杂度为O(n log n)
..
然后遍历“log n
中的元素
遍历为O(n)
,而不是O(log n)
。插入内容为O(log n)
,您正在进行n
次插入。