2 ^ sqrt(n)的时间复杂度


11

我正在解决一个算法问题,我的分析是它将在O(2 ^ sqrt(n))上运行。那有多大 它等于O(2 ^ n)吗?现在仍然是非多项式时间吗?


3
请对这个问题投反对票。谢谢!
Gaara

4
老实说,我怀疑人们会误以为这是一个非常琐碎的问题,但是对我来说,如何证明这两种方法并不是立即显而易见的,因此我将写一个答案,看看这是否会改变人们的想法。
Ixrec

3
次指数时间,第二个定义,根据Wikipedia的文章 (免责声明:我没有投票;而且我对该主题的了解不足以说这是否正确。)
rwong

1
大!次指数时间:“某些算法的运行时间可能比任何多项式增长得更快,但仍远小于指数时间”。这无疑回答了我的问题,并扩展了我对Big O分析的知识。非常感谢
Gaara

1
它比O(2 ^ n)小得多,尤其是对于大数而言。以拥有1万个元素的集合为例。2 ^ 10000是一个约3000位数字,这是对它执行O(2 ^ n)操作所需要的周期数。使用O(2 ^ sqrt(n)),您将得到一个30位数字。对于大量支持sqrt解决方案的差异而言,差异非常大(对于100万个元素((具有30万个数字的数字)* cpu周期与(具有300个数字的数字)* cpu周期)。
安迪

Answers:


16

这是个有趣的问题。幸运的是,一旦您知道如何解决它,就不会特别困难。

对于函数˚FÑ[R +Ñ[R +,我们有˚FÔ)当且仅当LIM SUP Ñ →∞ ˚FÑ)/ Ñ)∈ [R

函数˚FÑ[R +具有至多多项式生长当且仅当存在一个常数ķÑ使得˚FÖÑÑ ķ)。让我们的工作了这一点,对任意但固定ķñ

LIM SUP Ñ →∞ 2 Ñ 1/2 / Ñ ķ =
LIM Ñ →∞ 2 Ñ 1/2 / Ñ ķ =
LIM Ñ →∞ ë 日志(2)Ñ 1/2 / E 日志(Ñķ =
LIM ñ →∞ ë 日志(2)ñ 1/2 -日志(ñķ =∞∉ ř

第一个等式是正确的,因为分母和分母都是单调增长的稳定函数。第二个等式使用标识x y = e log(xy。该限制不是有限的,因为最终表达式中的指数不受上述限制。在没有给出正式证明的情况下,可以假定已知n 1/2渐近地主导log(n)。因此,所讨论的函数超过多项式增长。

然而,它的生长比的指数,其中指数被定义严格以下(我,为了这个目的)作为øñ ↦2 Ç Ñ)为C ^ > 0显示这是更简单的。

LIM SUP Ñ →∞ 2 ç Ñ / 2 Ñ 1/2 = LIM ñ →∞ 2 Ç ñ - ñ 1/2 =∞∉ ř

对于任何固定的c >0。因此,函数的复杂度确实在多项式和指数之间。


6

那有多大 好吧,O(2 ^ sqrt(n))到底有多大:-(

为了弄清楚它的含义,想象一下您的算法将不只是O(2 ^ sqrt(n)),而是实际上在您的计算机上需要2 ^ sqrt(n)纳秒:

n = 100:2 ^ 10 = 1024纳秒。根本没有时间。n = 1000:2 ^ 31.xxx = 20亿纳秒。两秒钟,这很明显。n = 10,000:2 ^ 100≈10 ^ 30纳秒= 10 ^ 21秒= 30万亿年

这比2 ^ n纳秒好得多,n = 100的纳秒要花费30万亿年,但是仍然可以解决的问题的规模非常有限。如果您认为一个问题可以解决,如果您的计算机可以在一星期内解决,则大约为6 x 10 ^ 14纳秒,大约为n = 2,400。另一方面,最多可以在毫秒内解决n = 400的问题。

(实际上,对于n = 10,000,O(2 ^ sqrt(n))和O(2 ^ n)花费的时间完全相同:等待时间太长。)

它确实超出了任何多项式。采取另一种算法,耗时n ^ 1000秒。这对于n = 2实际上是无法解决的。该算法花费的时间更长,直到n约为8.85亿。但是真的,谁在乎呢?到那时,两种算法所用的年数均为9,000位数字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.