【问题标题】:What is the Time Complexity for sorting all elements of ⌈logn⌉ sorted lists of ⌊n/logn⌋ elements each?对 ⌈logn⌉ 已排序的 ⌊n/logn⌋ 元素列表中的所有元素进行排序的时间复杂度是多少?
【发布时间】:2020-05-10 16:57:04
【问题描述】:

假设每个有 ⌈n/logn⌋ 元素的 ⌈logn⌉ 排序列表。生成所有这些元素的排序列表的时间复杂度是:(提示:使用堆数据结构)

A. O(nloglogn)

B. Θ(nlogn)

C. Ω(nlogn)

D. Ω(n3/2)

我的理解:

有一个 logn 列表,每个列表都包含 n/logn 元素,然后我们可以对每个列表应用最小堆过程 它可以在 O(n/logn) 中完成。现在我们有了满足最小堆属性的登录列表。现在我怎么能进一步理解它我真的很困惑。请帮我想象一下。

【问题讨论】:

    标签: algorithm time-complexity


    【解决方案1】:

    [我假设我们正在按升序排序]

    为每个列表的最小(即:第一个)元素构建一个堆,(并且对于每个列表以及值,记录它来自哪个列表的哪个索引)。反复删除此堆的最小元素,然后将下一个元素插入它来自的列表中(如果该列表尚未被使用)。这为您提供了所有元素的排序列表。

    这个堆有 [log(n)] 个元素,所以构建这个堆的初始成本是 O(log(n)),每次删除和插入需要 O(log(log n)) 时间。所以总的来说,这种排序的成本是 O(log(n) + nlog(log n)) = O(nloglogn)。

    【讨论】:

    • Paul Hankin,从堆中删除是否需要 O(1),因为它是最小堆,对吗?对于插入,我们在堆末尾插入元素并应用 min_heapify() 过程,这里有 logn 元素,因此需要 O(logn) 时间,我对 O(log(log n)) 时间感到困惑。你能解释一下吗?谢谢
    • @SanjayVerma 您对堆操作有误。插入和删除都需要 O(log N),其中 N 是堆的大小。这里,N = log n,所以它们都取 O(log log n)。 en.wikipedia.org/wiki/Binary_heap#Heap_operations
    • 好吧,是的,你是对的,他们将采用 O(log(log n)) 但这是最​​小堆,我们可以删除 O(1) 中的元素,但要再次满足我们的最小堆属性'必须应用 heapify 算法 Right 并且有 logn 元素然后删除将采取 log(log n)。
    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2010-09-15
    • 2011-03-29
    • 2016-05-06
    • 2017-05-20
    相关资源
    最近更新 更多