在计算Big(oh)时,从上限g(n)到哪里来?

时间:2018-02-11 10:52:34

标签: algorithm big-o

例如,我有一个程序的f(N)= 5N +3。我想知道这个函数的大(哦)是什么。我们说高阶项O(N)。

  1. 这是通过降低低阶条件和常数来找到任何程序的大(哦)的正确方法吗?

  2. 如果我们通过简单地查看复杂度函数5N + 3得到O(N)。那么,该式F(N)< = C * G(N)?

    的目的是什么

    我知道,这个公式只是为了比较两个函数。我的问题是,

  3. 在该式中,F(N)<= C * G(N),i具有F(N)= 5N + 3,但该上限G(N)是多少?它来自哪里?从哪里来我们接受它?

  4. 我学过很多书,很多帖子,但我仍然面临着困惑。

1 个答案:

答案 0 :(得分:1)

  

问:这是通过丢弃找到任何程序的大(哦)的正确方法   低阶条款和常数?

是的,大多数具有检查时间复杂性的经验的人都使用这种方法。

  

问:如果我们通过简单地查看复杂度函数5N + 3得到O(N)。   那么,该式F(N)&lt; = C * G(N)?

的目的是什么

要正式证明你正确估算了某些算法的大哦。想象一下,你有F(N) = 5N^2 + 10并且(错误地)得出结论,这个例子的大复杂性是O(N)。通过使用此公式,您可以快速看到这不是真的,因为不存在常量C,以便N的大值保持5N^2 + 10 <= C * N。这意味着C >= 5N + 10/N,但无论你选择多大的常数C,总是N大于此常数,因此这种不等式不成立。

  

Q:在这个公式中,F(N)<= C * G(N),我有F(N)= 5N + 3,但这是什么   上限G(N)?它来自哪里?从哪里来我们接受它?

它来自于检查F(N),特别是通过查找其最高阶词。你应该有一些数学知识来估计哪个函数比另一个函数增长得更快,开始检查这个useful link。有几类复杂性 - 常数,对数,多项式,指数。但是,在大多数情况下,很容易找到任何函数的最高阶项。如果您不确定,可以随时绘制函数图或正式证明一个函数比另一个函数增长得更快。例如,如果F(N) = log(N^3) + sqrt(N)可能乍一看不清楚什么是最高阶项,但是如果你计算或绘制log(N^3)的N = 1,10和1000以及sqrt(N)值,很明显sqrt(N)增长得更快,因此这个函数的大哦是O(sqrt(N))