跳转到内容

伪多项式时间:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Neuront留言 | 贡献
无编辑摘要
无编辑摘要
 
(未显示9个用户的12个中间版本)
第1行: 第1行:
{{unreferenced|time=2011-10-17T01:57:19+00:00}}
{{unreferenced|time=2011-10-17T01:57:19+00:00}}
{{NoteTA
在[[计算理论]]领域中, 若一个数值[[算法]]的[[时间复杂度]]可以表示为输入数值 N 的[[多项式]], 则称其时间复杂度为'''伪多项式时间'''. 由于 N 的值是 N 的位数的幂, 故该算法的时间复杂度实际上应视为输入数值 N 的位数的[[指数时间|幂]].
|G1 = IT
}}
在[[计算理论]]领域中若一个数值[[算法]]的[[时间复杂度]]可以表示为输入数值N的[[多项式]]则称其时间复杂度为'''伪多项式时间'''。这是由于,N的值是N的位数的幂故该算法的时间复杂度实际上应视为输入数值N的位数的[[指数时间|幂]]

一个具有伪多项式时间复杂度的[[NP完全|NP完全问题]]称之为{{le|弱NP完全|Weak NP-completeness|弱NP完全问题}},而在[[P/NP问题|P!=NP]]的情况下若一个NP完全问题被证明没有伪[[多项式时间归约|多项式时间]]复杂度的解则称之为{{le|强NP完全|Strong NP-completeness|强NP完全问题}}。


一个具有伪多项式时间复杂度的 [[NP完全|NP 完全问题]]称之为[[弱NP完全| NP 完全问题]], 而在 [[P/NP问题|P != NP]] 的情况下, 若一个 NP 完全问题被证明没有伪多项式时间复杂度的解, 则称之为[[强NP完全| NP 完全问题]].
== 例子 ==
== 例子 ==
在[[素性测试]]中, 使用较小的整数逐个对被测试数进行试除的算法被认为是一个伪多项式时间算法. 对于给定的整数 N, 使用从最小的[[素数]] 2 开始, √N 为止的整数依次对 N 进行试除, 如果均无法整除 N, N 是素数, 这个过程需要进行至多约 √N 次整数除法, 即其时间复杂度为 [[大O符号|O]](√N), N 的多项式. D N 的二进制表示的位数, 那么 N 可以表示为以 2 为底 D 的[[幂]], 因此素性测试问题的时间复杂度用 D 表示应为 O(<math>2^D</math>). 因此, 上述算法是一个伪多项式时间算法.
在[[質數測試|-{zh-hant:質數測試;zh-hans:素性测试}-]]中使用较小的整数逐个对被测试数进行试除的算法被认为是一个伪多项式时间算法对于给定的整数N,使用从最小的[[質數|-{zh-hant:質數;zh-hans:素数}-]]2开始<math>\sqrt{N}</math>为止的整数依次对N进行试除如果均无法整除N,则N是素数这个过程需要进行至多约<math>\sqrt{N}</math>次整数除法即其时间复杂度为<math>O(\sqrt{N})</math>,为N的多项式令D为N的二进制表示的位数那么N可以表示为以2为底D的[[幂]]因此素性测试问题的时间复杂度用D表示应为<math>O(2^{D/2})</math>因此上述算法是一个伪多项式时间算法


其它被证明只具有伪多项式时间算法解的问题有[[背包问题]], [[子集合加总问题]].
其它被证明只具有伪多项式时间算法解的问题有[[背包问题]][[子集合加总问题]]


[[Category:理论计算机科学]]
[[Category:理论计算机科学]]
[[Category:计算复杂性理论]]
[[Category:计算复杂性理论]]
[[Category:复杂度类]]
[[Category:复杂度类]]
[[Category:算法分析]]

[[de:Pseudopolynomiell]]
[[en:Pseudo-polynomial_time]]
[[pl:Algorytm pseudowielomianowy]]
[[ru:Псевдополиномиальный алгоритм]]

2023年4月8日 (六) 09:28的最新版本

计算理论领域中,若一个数值算法时间复杂度可以表示为输入数值N的多项式,则称其时间复杂度为伪多项式时间。这是由于,N的值是N的位数的幂,故该算法的时间复杂度实际上应视为输入数值N的位数的

一个具有伪多项式时间复杂度的NP完全问题称之为弱NP完全问题英语Weak NP-completeness,而在P!=NP的情况下,若一个NP完全问题被证明没有伪多项式时间复杂度的解,则称之为强NP完全问题英语Strong NP-completeness

例子

[编辑]

素性测试中,使用较小的整数逐个对被测试数进行试除的算法被认为是一个伪多项式时间算法。对于给定的整数N,使用从最小的素数2开始,到为止的整数依次对N进行试除,如果均无法整除N,则N是素数,这个过程需要进行至多约次整数除法,即其时间复杂度为,为N的多项式。令D为N的二进制表示的位数,那么N可以表示为以2为底D的,因此素性测试问题的时间复杂度用D表示应为。因此,上述算法是一个伪多项式时间算法。

其它被证明只具有伪多项式时间算法解的问题有背包问题子集合加总问题