Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对⌈;logn⌉;已排序的⌊;n/logn⌋;每个元素?_Algorithm_Time Complexity - Fatal编程技术网

Algorithm 对⌈;logn⌉;已排序的⌊;n/logn⌋;每个元素?

Algorithm 对⌈;logn⌉;已排序的⌊;n/logn⌋;每个元素?,algorithm,time-complexity,Algorithm,Time Complexity,假设有⌈洛根⌉ 已排序的⌊n/logn⌋ 每个元素。生成所有这些元素的排序列表的时间复杂性如下:(提示:使用堆数据结构) A.O(nloglogn) B.Θ(nlogn) C.Ω(nlogn) D.Ω(n3/2) 我的理解是: 有一个logn列表,每个包含n/logn元素,然后我们可以对每个列表应用最小堆过程 它可以在O(n/logn)中完成。现在我们有了满足min heap属性的logn列表。现在我怎么能进一步理解呢?我真的很困惑。请帮我想象一下 [我想我们是在按递增顺序排序] 构建每个列表中

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

A.O(nloglogn)

B.Θ(nlogn)

C.Ω(nlogn)

D.Ω(n3/2)

我的理解是:

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

[我想我们是在按递增顺序排序]

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


这个堆有[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(logn))时间混淆了。你能再解释一下吗。Thanks@SanjayVerma关于堆操作,您错了。insert和remove都取O(logn),其中N是堆的大小。这里,N=logn,所以它们都取O(logn)。好的,是的,你是对的,他们将采用O(log(logn)),但这是最小堆,我们可以删除O(1)中的元素,但为了再次满足最小堆属性,我们必须应用heapify algo right,并且存在logn元素,然后删除将采用log(logn)。