Algorithm 将k个列表与o(nlogk)合并

Algorithm 将k个列表与o(nlogk)合并,algorithm,merge,analysis,Algorithm,Merge,Analysis,Merge算法的运行时间是否为O(n log k) k是列表的数量 n是所有列表中的元素总数(n=n1+n2+…+nk) 算法合并(前半部分,后半部分,最小堆)//T(n)=O(n log k)? 前半部分不为空,前半部分不为空,请执行以下操作: 如果First_Half.First().element()小于Second_Half.First().element(),则 插入(Min_Heap,First_Half.remove(First_Half.First())) 其他的 插入(

Merge
算法的运行时间是否为O(n log k)

  • k是列表的数量
  • n是所有列表中的元素总数(n=n1+n2+…+nk)


算法合并(前半部分,后半部分,最小堆)//T(n)=O(n log k)?
前半部分不为空,前半部分不为空,请执行以下操作:
如果First_Half.First().element()小于Second_Half.First().element(),则
插入(Min_Heap,First_Half.remove(First_Half.First()))
其他的
插入(Min_Heap,Second_Half.remove(Second_Half.first())
虽然前半部分不是空的,但是
插入(最小堆,前半部分.remove(前半部分.First())
虽然后半部分不是空的,但是
插入(Min_Heap,Second_Half.remove(Second_Half.first())

算法插入(A,键)
A[n+1]1)和(A[i]>A[[i/2]])do
交换A[i]和A[[i/2]]

查看您的代码,您似乎对minHeaps是什么感到非常困惑。您拥有的代码是非常错误的,谈论进行合并排序的时间复杂性几乎毫无意义

您的Merge方法对合并两个列表没有任何作用,它所做的只是将元素插入到MinHeap中,并且也按排序顺序插入,这似乎完全没有意义

如果您使用MinHeap作为可访问所有调用并稍后从中读取的堆,那么它就是O(n logn),因为您正在向堆中插入n个项,并且您并不真正需要所有这些递归调用,只需逐个插入它们


因为这看起来像是家庭作业,我只给你一个提示:在任何时候,堆中的元素都不应该超过k个。

Merge是
O(logn)
,MergeSort是
O(NlogN)
。HeapSort是另一种算法。

我已经将其标记为家庭作业。
algorithm MakingAHalf(List_Of_Lists)
    if List_Of_Lists.size() = 1
        return the only list in List_Of_Lists
    else
        split List_Of_Lists into two halfs (First_Half and Second_Half)
    MakingAHalf(First_Half)
    MakingAHalf(Second_Half)
    Merge(First_Half, Second_Half, Min_Heap)
algorithm Merge(First_Half, Second_Half, Min_Heap)   //T(n) = O(n log k)?
    while First_Half  is not empty and First_Second is not empty do
        if First_Half.first().element() < Second_Half.first().element() then
            Insert(Min_Heap, First_Half.remove(First_Half.first()))
        else
            Insert(Min_Heap, Second_Half.remove(Second_Half.first())  
    while First_Half is not empty do
        Insert(Min_Heap, First_Half.remove(First_Half.first()) 
    while Second_Half is not empty do
        Insert(Min_Heap, Second_Half.remove(Second_Half.first())
algorithm Insert(A, key)
    A[n+1] <-- key
    while (i > 1) and (A[i] > A[[i/2]]) do
        swap A[i] and A[[i/2]]
        i <-- i - 1