Algorithm 合并排序如何具有多个大值?

Algorithm 合并排序如何具有多个大值?,algorithm,big-o,asymptotic-complexity,big-theta,Algorithm,Big O,Asymptotic Complexity,Big Theta,在中,投票最多的答案包含以下陈述: 例如,合并排序最坏的情况是O(n*log(n))和Omega(n*log(n)),因此也是ㄊ(n*log(n)),但它也是O(n^2),因为n^2渐进地“大于”它。然而,它不是}(n^2),因为算法不是ω(n^2) 我有两个问题: 如何确定最坏的情况是O(n*log(n))和Omega(n*log(n))。在“算法简介”中,通过计算每个语句的执行次数和成本来确定插入排序的Theta时间。对于O和Omega是否有类似的方法 合并排序的最坏情况是O(n*log(n

在中,投票最多的答案包含以下陈述:

例如,合并排序最坏的情况是
O(n*log(n))
Omega(n*log(n))
,因此也是
ㄊ(n*log(n))
,但它也是
O(n^2)
,因为
n^2
渐进地“大于”它。然而,它不是
}(n^2)
,因为算法不是ω(n^2)

我有两个问题:

  • 如何确定最坏的情况是
    O(n*log(n))
    Omega(n*log(n))
    。在“算法简介”中,通过计算每个语句的执行次数和成本来确定插入排序的
    Theta
    时间。对于
    O
    Omega
    是否有类似的方法
  • 合并排序的最坏情况是
    O(n*log(n))
    还是
    O(n^2)

  • 第二个问题的答案:

    当我们说“合并排序在
    O(x)
    中运行”时,这相当于说“合并排序的渐进运行时行为最多与
    x
    成比例”。换句话说:
    O(x)
    代表上限。请注意,这与最坏情况与最佳情况无关。您也可以给出最佳情况场景的上限

    总而言之:一个算法可以同时具有
    O(n logn)
    O(n^2)
    等,就像数字3同时小于5和10一样

    对第一个问题的回答:

    θ的大多数证明实际上由两个独立的证明组成——一个用于下界
    Omega(x)
    ,另一个用于上界
    O(x)
    。下限度量应用于问题:您声明问题无法在小于
    x
    (渐近)的时间内解决。这通常需要不同于上限的证明策略,即证明给定的算法将实际解决问题,并且不会超过
    x
    (渐近)给定的时间

    合并排序的最坏情况是
    O(n*log(n))
    还是
    O(n^2)


    因为符号
    f(n)=O(g(n))
    意味着
    f(n)
    渐近地小于或等于
    g(n)
    。也许一个不那么误导的符号是
    f(n)首先,你问题中的链接并没有指向公认的答案。它指出了投票率最高的答案

    现在,逐一回答您的问题


    如何确定最坏的情况是O(nLog(n))和Ω(nLog(n))。在“算法简介”中,通过计算每个语句的执行次数和成本来确定插入排序的θ时间。对于O和ω有类似的方法吗

    为了使这个答案对每个人都有用,我将再次提到与合并排序相关的要点

    • 合并排序是一种分治算法
    • 取一个数字序列,递归地将其分成两半,对两半分别进行排序,最后再递归地将两半合并,得到一个已排序的数字序列
    以最简单的情况为例。如果在这种情况下运行合并排序,您会接触多少个元素†?借助下面的图像很容易进行可视化。每一级接触的元素为cn,共有lg n级。因此,即使在最简单的情况下,所涉及的元素总数也是cnLog(n)

    因此,合并排序将始终具有最小的复杂性≈ cnLog(n),也写为合并排序为Ω(nLog(n))。

    嗯。因此,我们知道,即使在这个算法最简单的运行中,我们也必须触摸序列的元素总共cnLog(n)次。现在

    否则,我们会接触序列的元素多少次?无论如何,合并排序的递归树将与上面完全相同。因此,我们将始终具有与nLog(n)成比例的合并排序的运行时复杂性!这意味着合并排序的上限和下限都是cnLog(n)

    因此,合并排序的运行时复杂性不仅是Ω(nLog(n)),而且是O(nLog(n)),这意味着它是ㄊ(nLog(n))。

    您希望看到(或者能够可视化)为合并排序完成的计算。我希望显示在树的每个级别上进行的计算的图形说明是令人满意的


    合并排序的最坏情况怎么可能是O(n*log(n))和O(n^2)

    这很简单,但就像前面的答案一样,我将从基本定义开始,这样答案对每个人都有用

    为了理解术语,我喜欢下面的图片

    请注意,Big-O只强调上面的边界。它不关心上面有多远。因此,一个算法的大O复杂度是无限函数。其中信息量最大的是上面的算法,否则每个算法都是O(无穷大)

    现在定义清楚了,我们可以很容易地说合并排序是O(nLog(n))和O(n2)



    本解释中的“触摸”一词相当于您在问题中所写的“计数[次数”)。在算法运行期间,每次遇到一个数字时,我们都说这个数字被触摸了。因此,我们有效地计算一个数字的接触次数来确定算法的复杂性。

    将大O视为“你有多聪明”,将大Omega视为“问题的难度”。证明大Omega比证明大O困难得多。换句话说,你可以用O(N^2)来解问题,但这实际上可能是一个非常简单的线性问题,我假设在最简单的情况下,你们的意思是