Algorithm O(n)的形式化定义如何与数据结构类中的简单解释联系在一起

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)=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^2
n
是一个正整数,这意味着
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