Algorithm O(n)的形式化定义如何与数据结构类中的简单解释联系在一起
Big-O的非正式概念被描述为“它是函数的最高增长阶”,即f(n)=3n^2+5n+50就是O(n^2)Algorithm O(n)的形式化定义如何与数据结构类中的简单解释联系在一起,algorithm,data-structures,big-o,Algorithm,Data Structures,Big O,Big-O的非正式概念被描述为“它是函数的最高增长阶”,即f(n)=3n^2+5n+50就是O(n^2) 我明白Big-O只是一种表达“保证不会比这段时期更糟糕”的方式。形式上,定义似乎是f(n)->O(g(n))如果f(n)c是一个常数(即独立于n) 在您的第一个示例中(这是矛盾证明): i、 e.假设 5n^2 <= cn 5n <= c 5n^2n是一个正整数,这意味着1 Big-O的非正式概念被描述为“它是函数的最高增长阶”,即f(n)=3n^2+5n+50就是O(n^2)
我明白Big-O只是一种表达“保证不会比这段时期更糟糕”的方式。形式上,定义似乎是f(n)->O(g(n))如果f(n)
c
是一个常数(即独立于n
)
在您的第一个示例中(这是矛盾证明):
i、 e.假设
5n^2 <= cn
5n <= c
5n^2n
是一个正整数,这意味着1
Big-O的非正式概念被描述为“它是函数的最高增长阶”,即f(n)=3n^2+5n+50就是O(n^2)
我不会说这是Big-O背后的想法。非正式地说,Big-O是对给定函数不能超过的部分的粗略估计。它的用途主要是近似于大数字的增长
例如,如果我们取一个6位数的数字,我们可以肯定地说它不到百万,而不需要寻找它的数字。在很多情况下,这就足够了,我们不需要分析所有数字
在分析功能增长时,有两个因素起作用:
我们只对非常大的数的函数行为感兴趣
如果f
大于g
,但我们可以通过将g
乘以某个大常数来修正它,这意味着f
的优势不在于增长
这就引出了定义的两个部分:(1)一些常数和(2)足够大的n
事实上,对于多项式,高阶分量定义了增长速度。C是“某个常数”——它必须独立于n。但对于g(n)=n^3的例子,这并没有帮助。简化c=5/n取决于n,对吗?但是5n^2肯定是O(n^3)(它的界较低,因此也应该包含它)?参见定义c
,在Big-O的定义中,是一个任意选择的常数。基本上,对于一个函数g(n)
属于O(f(n))
,它必须有一些值,c
必须有任何常量值,这样g(n)
就等于在n
变为无穷大时提供了一个行为的界限。我喜欢你没有拐弯抹角,没有直接与n^3进行比较。是否有证据表明,在我的类中,总是有一些c适用于更简单的定义?我真的不想看到它,我只是好奇为什么他们会把它说得那么简单。定义几乎是等价的——有一些最终的情况。例如-f(n)=n
和g(n)=n^2-n
。当n=1
时,g(1)=1^2-1=1-1=0
而f(1)=1
。无论你选择什么c
你永远不会得到f(1)
5n^2 <= cn^3
5/n <= c
5n^2 <= cn
5n <= c