Big o 大O代数简化问题

Big o 大O代数简化问题,big-o,Big O,我已经研究一个问题好几个小时了,我需要澄清: 我需要简化(尽可能多地)下面的big-O表达式。对于每一个问题,我都记下了我认为正确的答案。我想要解决方案,但如果我不正确,我也希望得到解释。我正在尽可能地学习大O符号,我认为解决这些问题帮助很大。我只是想确定我走的是正确的道路 a) O(sqrt(n)+log(n)*log(n)) 我以为这是O(n) b) O(3log2n+2log3n) 我以为这是O(log3(n)) c) O(n^3+2n^2+3n+4) 我以为这是O(n^3) 谢谢你的帮助

我已经研究一个问题好几个小时了,我需要澄清:

我需要简化(尽可能多地)下面的big-O表达式。对于每一个问题,我都记下了我认为正确的答案。我想要解决方案,但如果我不正确,我也希望得到解释。我正在尽可能地学习大O符号,我认为解决这些问题帮助很大。我只是想确定我走的是正确的道路

a)
O(sqrt(n)+log(n)*log(n))

我以为这是
O(n)

b)
O(3log2n+2log3n)

我以为这是
O(log3(n))

c)
O(n^3+2n^2+3n+4)

我以为这是
O(n^3)


谢谢你的帮助

让我们一次看一遍这个

O(sqrt(n)+log(n)*log(n))。我以为这是O(n)

你是对的,这是O(n),但这不是一个特别紧的界限。让我们从一个简化的问题开始:O(sqrt(n))或O(log(n)*log(n))哪个增长更快?利用这些信息,你能从总和中去掉这两项中的一项吗

O(3log2 n+2log3 n)。我以为这是O(log3(n))

请记住,“big-O忽略对数的底”(即,对于大于1的任何b和c,logbn=O(logcn))。从技术上讲,它是O(log3n),但这不是最干净的解决方案。你最好在这里说O(logn)

O(n^3+2n^2+3n+4)。我以为这是O(n^3)

完全正确!这是因为2n2+3n+4是O(n3),所以可以从求和中删除这些项。现在,你能用类似的技巧来简化(a)部分的答案吗

希望这有帮助

(a)是我认为最难的一个;(b) 和(c)使用相当常见的规则来简化大型Oh


对于(a),我建议做一个替换:让m=[使两项中的一项更简单的n的某个函数]并重新排列得到n=[某物]。然后,您可以使用它将m替换为表达式,从而消除n的所有外观,并根据大Oh规则对其进行简化。然后,假设您选择的函数是n的递增函数,您可以将n替换回,并在需要时进一步简化。

好的,答案很长,但我始终都很满意

简介: 你需要做的第一件事是正确定义你所说的“大O”是什么意思。传统上,它只被定义为上限。但它在计算机科学中不是很有用,至少对于像你这样的任务来说不是。从技术上讲,你可以用比示例增长更快的任何东西来回答问题,例如,对所有问题说
O(n!)
,从技术上来说都可以

更有用的是大θ,通常在CS中,我从上面的阅读中看到大O被重新定义为大θ的含义。不同的是,你的界限,必须更紧,也适用于从下面

定义/规则:我最喜欢的计算大O(和θ)的方法是使用极限。它允许以简单直接的方式求和渐近行为关系

基本上,如果(
x->inf
在此处和之后暗示):

  • lim f(x)/g(x)=无穷大
  • limf(x)/g(x)是一个大于0的常数
  • limf(x)/g(x)=0
    -f渐近增长慢于g
  • 2号。是大θ。2号。三,。组合在一起的是传统的大O,如“
    f
    属于
    O(g)
    ”(或“is
    O(g)
    ”,这有点让人困惑)。这意味着
    f
    不会超过
    g
    ,因此
    g
    是它的上限

    现在用一点数学很容易证明大O(或θ)只关心增长最快的项。这直接来自极限属性

    从现在起,我将使用
    O
    作为大θ,因为大O更松散,所以一切都适用

    示例说明: 你的第三个例子是最简单的。您可以安全地放下
    2n^2+3n+4
    ,因为
    n^3
    增长更快。通过计算
    limn^3/(n^3+2n^2+3n+4)
    可以证明
    n^3+2n^2+3n+4
    O(n^3)

    第二个例子也是如此,但需要遍历对数属性。基本上:

    logb1(x)=clogb2(x)
    -这意味着你可以在牺牲常数的情况下切换对数的底。。。根据上面的规则定义,常数因子不会改变任何东西,它仍然是2。只是不断的变化


    你的第一个例子是最难/最棘手的,因为限制是最复杂的。然而,
    O(f+g)
    要么是
    O(f)
    要么是
    O(g)
    ,因为其中一个增长更快,所以另一个可以被丢弃,或者它们渐进地增长相同,所以可以选择其中一个(它们的最快增长项无论如何都是相同的)。这意味着你需要检查哪一个生长得更快,你可以通过。。。计算
    limsqrt(n)/(log(n)*log(n))
    并根据上面的规则进行选择。我认为这一条需要医院规则。

    看来你走对了路。你以后可能想问cs.stackexchange这类问题。哦,谢谢AndyG,我是新来的,下次我会记得的。澄清:O(sqrt(n)+log(n)*log(n))不是O(n)。前者是后者的子集,但它们并不相等。例如,T(n)=n在O(n)中,但不在O(sqrt(n)+log(n)*log(n))中。技术上是这样的。大Oh只定义上限。这就是为什么人们说“这不是一个特别严格的约束”。@luk32不,不是。满足O(n)的松散界限的函数不一定满足较紧的界限。因此,这两个集合不能相等。
    O(sqrt(n)+log(n)*log(n))的一切