Algorithm 合并排序的基本混乱’;分步

Algorithm 合并排序的基本混乱’;分步,algorithm,sorting,mergesort,Algorithm,Sorting,Mergesort,在合并排序中,每个元素的除法步骤的运行时间被视为θ(1),即CLRS中的恒定时间 我的困惑是: 让除是一个基本运算,需要恒定的时间C1。 现在,考虑PuxoDCOD[BR> 现在,当第一次调用MERGE-SORT函数时,需要C1来分割输入(注意:-我们不考虑MERGE函数所花费的时间) 这个合并排序将把输入lg(n)时间(或者我们可以说它将自己称为lg((n))次) 因此,划分输入所用的总时间应为C1*lg(n) 也就是θ(lg(n)) 但在CLR中: 如果我们认为除法步骤< /强>将要

合并排序中,每个元素的除法步骤的运行时间被视为θ(1),即CLRS中的恒定时间


我的困惑是:
除是一个基本运算,需要恒定的时间C1。 现在,考虑PuxoDCOD[BR>

现在,当第一次调用MERGE-SORT函数时,需要C1来分割输入(注意:-我们不考虑MERGE函数所花费的时间) 这个合并排序将把输入lg(n)时间或者我们可以说它将自己称为lg((n))次 因此,划分输入所用的总时间应为C1*lg(n) 也就是θ(lg(n))


但在CLR中:

如果我们认为<强>除法步骤< /强>将要求<强>θ(1)时间< /强>(作为整体)

注意:lg是以2为基数记录的


p.S.-事先抱歉,因为我的英语没有达到那个标准。编辑是受欢迎的:

对合并排序的基本理解是这样的——考虑我们有两个已经排序的数组的一半。我们可以在O(n)时间内合并这两部分

从数学上讲,函数Merge Sort为它的两部分(DIVIDE步骤)调用自己两次,然后合并这两部分(concure步骤)

现在,如果我们解决这个递推关系(通过使用适当的数学分析),我们得到如下关系:

这清楚地表明,需要O(1)时间的分割步骤被称为n次,而合并所有大小较小的一半的总合并工作量为O(n logn),这是上限。因此O(n logn)的复杂性(感谢您的澄清)


然而,除法步骤只需要O(1)次,这称为O(n)次。因此,除法的工作量是O(n)。

除法的一个步骤确实需要恒定的时间
O(1)

但与您的想法相反,总共有
Θ(N)
个分区(
1+2+4+8+…N/2


无论如何,这不算在内,因为总合并工作负载是
Θ(logn)

如果一次除法需要C1时间,那么logn除法将需要C1*logn,即O(logn)不是it@YiğitArasTunalı那么整个除法步骤需要O(对数n),不是吗?数组不是除法O(对数n)次而是除法O(n)次。真的,我的错,我有点糊涂了。这是正确的,它将被称为
O(n)
times@YvesDaoust请检查我编辑的答案。我从中了解了很多东西。我们总共有n个元素(或者说数组大小n),要得到1个元素(或者数组大小1),分母必须是n,这里我们每次都将n除以2,因此2^k=n等于k=lgn@Bhaskar你的推理是错误的。实施合并排序并安装计数器。(或者重新阅读我的答案。)我不明白为什么合并步骤需要O(nlogn)时间。@saketk21:单个合并步骤需要O(N)个,总共有O(N)个合并步骤。但不是所有的大小都一样。是的,我解出了递归关系,并算出了它。我下一步做什么?删除或编辑我的答案?这里只是一个注释,库中合并排序的大多数实际实现都是的变体,其中除法步骤将n个元素的数组视为大小为1的n个运行,然后开始合并过程。混合自底向上的合并排序可以从使用插入排序对k个元素的组进行排序开始,然后对n/k个现在已排序的组使用合并排序。