【问题标题】:What is f(n), g(n) and real constant in The Big-Oh Notation [duplicate]Big-Oh符号中的f(n),g(n)和实常数是什么[重复]
【发布时间】:2013-07-31 05:11:57
【问题描述】:

书上的定义说

“大哦”符号

令 f(n) 和 g(n) 为将非负整数映射到实数的函数。我们说 f(n) 是 O(g(n)) 如果有一个实常数 c > 0 和一个实常数 n0 ≥ 1 使得

f(n) ≤cg(n), for n ≥ n0.

我无法理解公式和定义中使用的术语,有人可以用简单的英语解释一下。

【问题讨论】:

  • 定义的哪一部分你不明白?词、句?你知道什么是数学意义上的函数吗?

标签: algorithm data-structures big-o


【解决方案1】:

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

例如,二分查找是O(log n)(或O(ln n),等价)。为什么?

(二分搜索的工作原理是这样的:取中间元素,并与目标进行比较。如果是那个,你就完成了。如果它比目标大,则丢弃列表的后半部分并重复前半部分;如果小于目标,则丢弃前半部分并在后半部分重复搜索。)

因为您需要 1 次操作才能在 3 个元素长的列表中找到某些内容; 7 个元素时的 2 次操作; 3 如果它是 15 个元素长。因此,当元素个数n(2^x - 1) 对于任何x 时,操作数为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 n 称为g(n)

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

关于n0 的那一点只是一个守卫,它说我们为小的n 计算的复杂性可能是偏差、异常、规则的例外,如果我们使用足够大的数据(即@ 987654349@),规则变得明显且不可侵犯。在这种情况下,该规则从一开始就非常有效,但某些算法可能会产生额外的成本,从而导致对小数的计算无法进行。

【讨论】:

    【解决方案2】:

    翻译成“简单的英语”:想象一下 f(n) 是 g(n) 函数,它接受一个正数或零作为输入,并给出一个实数作为输出(没有虚数)。

    Big-Oh 允许我们比较两个函数以查看一个是否受另一个约束。例如,指数函数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。以下是否可以解决:2^n ≤ c * n for n ≥ n0?答案是不。无论c 插入什么值,当n 接近无穷大时,左侧总是大于右侧。对于所有值n ≥ n0,无法使左侧小于右侧。

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

    【讨论】:

    • "in the same set of functions" - 不确定这是什么意思,但听起来不对。
    • 如果f(n) 是指数的,g(n) 是线性的,f(n) 确实不在O(g(n)) 中,但g(n)O(f(n)) 中。所以你的解释有点误导——如果只是关于它们是否不同,那么关系肯定是对称的,不是吗?
    • 同意。我将对此进行更准确的编辑。我真的很关注 big-Oh 的常见用法,用于将算法分类为相似。
    【解决方案3】:

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

    f(n)g(n) 为函数,其中 n 的值即域为 0 或正整数, 的值对于n 的值,f(n)g(n) 可能是实数。

    如果有一个实常数 c > 0 和一个实常数 n0 ≥ 1,我们说 f(n) 是 O(g(n)):

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

    f(n) = O(g(n)) 如果存在正常数 cn0 使得 0 for all n >= n0. 实际上,这意味着f(n) 渐近小于或等于@ 987654326@.


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

    3 * n^2 + 5

    f(n) 不是 O(n),因为无论你选择什么常量c 和值n0,我总能找到@ 的值987654331@ 大于 n0,因此 3 * n^2 + 5 大于 c * n

    【讨论】:

    • 你能举个简单的例子吗,常数 c 和 n 可以帮助我更好地理解。
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多