Big o 用简明英语解释算法证明

Big o 用简明英语解释算法证明,big-o,proof,formal-verification,induction,Big O,Proof,Formal Verification,Induction,我是一个从未正式学习过算法的程序员,一直想填补我学习中的空白。我目前正在阅读一些书籍和在线材料,我理解大O的概念,即它的用途,以及不同类别的性能,例如常数、线性、二次型等。我可以编写问题代码,直观地理解不同方法的性能含义 然而,我一直被困在算法证明的符号上,我不确定从哪里找到这一部分。我看过的所有书都假定这一知识水平 例如,斯基纳算法设计手册中的这句话让我感到困惑: f(n)=O(g(n))表示c*g(n)是f(n)的上界。 因此存在一些常数c,使得f(n)总是≤ c*g(n),对于足够大的n(

我是一个从未正式学习过算法的程序员,一直想填补我学习中的空白。我目前正在阅读一些书籍和在线材料,我理解大O的概念,即它的用途,以及不同类别的性能,例如常数、线性、二次型等。我可以编写问题代码,直观地理解不同方法的性能含义

然而,我一直被困在算法证明的符号上,我不确定从哪里找到这一部分。我看过的所有书都假定这一知识水平

例如,斯基纳算法设计手册中的这句话让我感到困惑:

f(n)=O(g(n))表示c*g(n)是f(n)的上界。

因此存在一些常数c,使得f(n)总是≤ c*g(n),对于足够大的n(即n≥ n0表示某些常数n0)。

这是读者应该完成的必然练习:

3n^2− 100n+6=O(n^2),因为我选择c=3和3n^2>3n^2− 100n+6

我能理解这两种说法,并且从逻辑上看,第二种说法是正确的。我也理解上限的概念,即这是最坏的情况

但我一直停留在简单的事情上,比如,上面提到的是什么

  • g(n)

  • n≥ 某些常数n0的n0

总的来说,我不能把这些片段放在一起来理解整个证据


有谁能帮我用简单的英语解析上述陈述,并以一种对非技术人员有意义的方式展示它们与练习之间的关系吗

g(n)是您将实际运行时与之进行比较的函数。例如,您可以说冒泡排序是O(n^2),使g(n)=n^2。但是,直觉上,您的算法不会精确地采用n^2时间单位(无论您希望在此处插入什么时间单位);可能需要3n^2− 但是,100n+6(即f(n))时间单位

现在,Big Oh符号所做的是比较两个函数的增长速度;请注意,这是一个非常粗略的比较。例如,它不区分需要f(n)=n^2时间单位的算法和需要f(n)=5n^2的算法,也不区分具有f(n)=n^2的算法和具有f(n)=n^2+n的算法。这就是c发挥作用的地方——如果你能找到任何常数c,你可以用它乘以g(n),这样得到的函数每n返回一个大于f(n)的值,那么f(n)=O(g(n))


大Oh表示法也关注的是f(n)中增长最快的部分。假设您想将f(n)=n+100g(n)=n进行比较。直观地说,f(n)=O(g(n)),但是没有c可以与g(n)相乘,因此它总是大于f(n);然而,n的增长速度明显快于根本没有增长的100。最后,这就是n0发挥作用的地方:如果a对于有限数量的nc*g(n)不大于f(n),只要对于无限数量的n,大Oh符号“容忍”它。该有限数以n0给出,例如,对于所有n<1(这是一个有限量:正好是数字0),f(n)=n+100可以大于c*g(n)=c*n,只要对于所有其他n(无限量:所有数字=1,使n0=1f(n)更小。

这里的主要问题是你不习惯数学中使用的习惯用法

让我们一句一句地说:

  • f(n)=O(g(n))表示c*g(n)是f(n)的上界。

    简单英语:嘿,写c*g(n)是f(n)的上界。对我来说太多了,从现在起我会用很多。从现在开始,每次我想说这个,我都会写f(n)=O(g(n))。还有,f(n)和g(n)只是函数,我不在乎哪一个,只要它们取整数n作为参数并返回一些实值。c只是一个常数,所以我上面所做的肯定是正确的。记住,我不是在说复杂性,关于f或关于g,我只是在创建一个快捷方式,说c*g(n)是f(n)的上界

  • 因此存在一些常数c,使得f(n)总是≤ c*g(n),对于足够大的n(即n≥ n0表示某些常数n0)。

    如果你不知道的话,我会告诉你函数的上界是什么。函数g(n)是f(n)的上界≤ c*g(n)表示足够大的n。你肯定想知道足够大意味着什么,是吗?我们只是指f(n)≤ c*g(n)对于大于某个数的所有n都是真的。我们不知道它是哪个数,我们也不想知道,因为对我们来说唯一重要的是这个数存在!我们将它称为n0,这样我们就可以说,如果n≥ 不

  • 3n^2− 100n+6=O(n^2),因为我选择c=3和3n^2>3n^2− 100n+6;

    简单的英语:现在让我们来举个例子来说明