大(Big)中f(n),g(n)和真实常数是什么?

这个问题在这里已经有了答案:

  • “大O”符号的简单英文解释是什么? 36个答案

  • 基本上, f(n)O(g(n))那么g(n)f(x)的最坏情况成正比。

    例如,二进制搜索是O(log n) (或O(ln n) ,这相当于)。 为什么?

    (二进制搜索是这样的:取中间元素,并与目标进行比较,如果是一个,则表示完成;如果大于目标,则丢弃列表的后半部分并在前半部分重复;如果它小于目标,则扔掉前半部分,并在下半部分重复搜索。)

    因为您需要1次操作才能在3个元素的列表中查找某些内容; 2个操作,当它是7个元素时; 3如果它是15个元素长。 因此,对于任何x ,当元素的数目n(2^x - 1) ,操作的数目是x ; 把它转过来,你会说元素数n ,操作次数是log_2 n 。 并说每个操作持续2秒(比如说你用手比较东西),最差的搜索时间是log_2 n * 2 secondslog_2 n可以被重写为ln n / ln 2 ,所以公式变成:

    worst search time(n) = (ln n / ln 2) * 2 seconds
                         = (2 seconds / ln 2) * ln n
    

    现在, 2 seconds / ln 2是一个常数; 让我们称之为c 。 我们称之为“n个元素的搜索时间” f(n) 。 我们称ln ng(n)

    我们之前说过,如果n = 3g(3) <= c * ln 3 (因为c * ln 3是最差的搜索时间,所以真正的搜索时间总是小于或等于那个;但是我们总能在第一个时间找到它尝试)。 如果n = 7 ,则g(7) <= c * ln 7 ; 等等

    关于n0一点只是一个警卫,说我们为小n计算的复杂性可能是偏差,异常,规则的例外,如果我们用足够大的数据去处理(即n >= n0 ),规则变得显而易见和不可侵犯。 在这种情况下,该规则从一开始就工作得非常多,但是一些算法可能会产生额外的成本,从而导致对小数字的计算失败。


    翻译为“简单英语”:假设f(n)是以正数或零作为输入的g(n)函数,并给出实数作为输出(无虚数)。

    大哦,我们可以比较两个函数,看看是否有另一个函数。 例如,指数函数f(n)不会被线性函数g(n) ,所以f(n)不会是O(g(n))

    如果以下可能,我们可以说f(n)O(g(n)) :对于f(n) ≤ c * g(n) for n ≥ n0 。 如果通过插入cn0来解决方程式,那么f(n)O(g(n))

    例如(同上),令f(n) = 2^n, g(n) = n 。 以下可解:n≥n0时, 2^n ≤ c * n for n ≥ n0 ? 答案是不。 无论什么值插入c ,当n接近无穷大时,左侧将总是大于右侧。 对于所有值n ≥ n0没有办法使左侧小于右侧。

    另一方面,如果f(n) = 2n, g(n) = n ,则当2n ≤ c * n for n ≥ n0 ,条件为2n ≤ c * n for n ≥ n0 。 这是可以解决的: c = 2, n0 = 0


    令f(n)和g(n)是将非负整数映射到实数的函数。

    令f(n)和G(N)是函数,其中的值n为的那些值,即域是0或正整数,f的值(n)和G(N) n可以是实数。

    如果存在实常数c> 0且实常数n0≥1,那么我们说f(n)是O(g(n)),使得:

    对于n≥n0,f(n)≤cg(n)。

    如果存在正常数cn0 ,使得对于所有n> = n 0,0 <= f(n)<= cg(n),则f(n)= O(g(n))。 实际上,这意味着f(n)渐近地小于或等于g(n)


    例如,考虑f(n)= 3 * n ^ 2 + 5。我们可以通过选择c = 4和n0 = 2来证明f(n)是O(n ^ 2)。这是因为对于所有的n大于2

    3 * n ^ 2 + 5 <= 4 * n ^ 2

    f(n)不是O(n),因为无论你选择哪个常数c和值n0 ,总能找到一个大于n0n值,这样3 * n ^ 2 + 5就大于c * n

    链接地址: http://www.djcxy.com/p/6767.html

    上一篇: What is f(n), g(n) and real constant in The Big

    下一篇: List of increasing order of complexity?