Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/math/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 为什么n^O(1)表示多项式时间?_Math_Big O - Fatal编程技术网

Math 为什么n^O(1)表示多项式时间?

Math 为什么n^O(1)表示多项式时间?,math,big-o,Math,Big O,一个算法在多项式时间内运行,如果它的运行时间是O(nk)对于某些k。然而,我也见过多项式时间被定义为时间1 我对此有一些疑问: 为什么没有(1)多项式时间?k怎么了 如果nO(1)是多项式时间,那么3n2应该是nO(1)。但是那三个去了哪里?这是怎么回事 谢谢 当您有一个类似“运行时为O(n)”或“运行时为O(n2)”的表达式时,O(n)和O(n2)项不是实际的函数。相反,它们是具有某些属性的其他函数的占位符。例如,以以下语句为例: 该算法的运行时间为O(n) 这句话真的很有意思 有一个函数f(

一个算法在多项式时间内运行,如果它的运行时间是O(nk)对于某些k。然而,我也见过多项式时间被定义为时间1

我对此有一些疑问:

  • 为什么没有(1)多项式时间?k怎么了
  • 如果nO(1)是多项式时间,那么3n2应该是nO(1)。但是那三个去了哪里?这是怎么回事

  • 谢谢

    当您有一个类似“运行时为O(n)”或“运行时为O(n2)”的表达式时,O(n)和O(n2)项不是实际的函数。相反,它们是具有某些属性的其他函数的占位符。例如,以以下语句为例:

    该算法的运行时间为O(n)

    这句话真的很有意思

    有一个函数f(n),其中算法的运行时间是f(n),f(n)=O(n)

    例如,如果函数的实际运行时间为137n+42,则“算法的运行时间为O(n)”语句为真,因为存在某个函数(即f(n)=137n+42),其中算法的运行时间为f(n)且f(n)=O(n)

    鉴于此,让我们考虑一下“算法的运行时是否(1)”这句话的意思。这句话相当于

    有一个函数f(n),其中算法的运行时间是nf(n),f(n)=O(1)

    现在我们已经把术语弄清楚了,这到底意味着什么?直观地说,一个函数是O(1),如果它最终由某个常数从上面限定。因此,O(1)的任何函数f(n)必须满足f(n)≤ 一旦n变得足够大,k。因此,至少在直觉上,nO(1)表示“n提升到某个至多k的幂次方”,这听起来像多项式函数的定义

    当然,还有一个令人讨厌的问题,就是常数因素。函数137n3肯定是O(n3),但它前面有一个巨大的常数项。另一方面,如果我们有一个形式为nO(1)的函数,在n3前面就没有常数项。我们如何处理这件事

    这是我们可以在数学上变得可爱的地方。对于137n3,请注意,当n>1时,我们有

    137n3=nlogn137 n3=n3+logn 137

    请注意,这是n提升到logn 137的幂。虽然它看起来像函数logn 137随着n的增大而增大,但实际上它具有相反的行为:它随着n的增大而减小。这是因为我们可以使用基本公式的更改将logn 137重写为

    对数n 137=对数137/对数n

    从长远来看,当对数n减小时,它明显减小。因此,表达式3+logn137最终由某个常数从上方限定,因此它是O(1)

    使用这种技术,可以通过选择n的指数为k加上大O表示法中出现的nk项前面常数因子的对数基数n,将O(nk)转换为nO(1)。类似地,我们可以通过选择k为任何常数,使函数的上界为n的指数中O(1)项所隐藏的函数,从而将nO(1)转换回O(nk)


    希望这有帮助

    137n=n^(对数为137)n^3。也许,137n^3=…,而不是137n?哦,天哪,那是个打字错误。谢谢你抓住了+1感谢花时间把所有的
    都写进去(尽管答案也很好!):+1。但是你在“当然,还有常数因子这个讨厌的问题。函数137n^3肯定是O(n)”@Teepeemm中有另一个输入错误-谢谢你发现了这一点。固定的!你有没有在指数中用O表示的例子?我知道你要用它,很直观,
    n^O(1)
    将是一个多项式,但我不确定我是否喜欢这个符号
    f(x)=O(g(x))
    对于
    f(x)已经是草率的了∈ O(g(x))
    ,将该术语用作指数会使其远离其原始含义,并使人们更难理解
    O(g(x))
    是一个集合而不是单个函数的表示法。但是,如果您知道自己在做什么,这可能会非常有用。:)@卡斯滕——我在复杂性理论方面的书籍中看到过这一点(例如,Arora和Barak的计算复杂性)。此外,符号f(n)=O(g(n))令人困惑,但从技术上讲,这并不是滥用符号;许多作者以这种方式正式定义了big-O符号。