【问题标题】:Why is finding the factors of a number an algorithm with exponential time complexity?为什么寻找数字的因数是一种具有指数时间复杂度的算法?
【发布时间】:2014-09-01 20:39:43
【问题描述】:

为什么这个算法的时间复杂度是指数级的?

我了解“模数”是按位运算符,对单个位进行运算。因此,在最坏的情况下,我们需要执行 sqrt(2^n) 除法。所以这是一个exp时间算法。

如果这是真的,不是所有的算法都会变成指数时间吗?请解释。

Find-Factor(X)
1: if X is even then
2: return ”2 is a factor”
3: end if
4: for i = 3 to Sqrt(X) by +2 do 
5:    test if X%i = 0, if yes, output ”i is a factor”
6: end for
7: return ”X is a prime.”

【问题讨论】:

  • 我不太明白第 4 行...
  • 模数是除法,而不是按位。只有当除数是 2 的精确幂和字面量时,它才能变为按位。
  • @HuStmpHrrr 请检查。我换行了

标签: algorithm time-complexity


【解决方案1】:

指数来自迭代次数。在最坏的情况下(即情况数是素数)您必须进行 X / 2 次迭代(在此算法中,它不是一个好的算法,例如,您可以使用 sqrt(X) 而不是 X 来限制循环)。这与输入中的位数 = ln(X) 成指数关系。不是数字 X。

顺便说一句,有一些概率检查可以很快确定给定数字是否为素数。还有一个相当复杂的算法可以确定性地完成相同的工作。您可以谷歌搜索并找到它们。

【讨论】:

  • 投下票的那位,能告诉我原因吗?有什么问题吗?
  • 我更关心这是怎么发生的。不是特别素数算法。我想知道为什么 2^n 以及为什么这不适用于所有其他算法。
  • 那是我,因为“你必须做 X/2 循环”,以及“来自 for 循环的数量”。
  • 给我一个算法,我会试着解释它的时间复杂度。顺便说一句,我必须注意问题的时间复杂度和算法之间存在区别。您不能编写时间复杂度小于问题复杂度的算法。但你总是可以做得更糟。目前没有证据证明“寻找数字的因数”问题的时间复杂度是指数级的。 (但是该问题的最佳算法是指数的)。对于量子计算机,同样的问题也有一个多项式算法。
  • @jthill 在编辑之前,算法一直搜索到 X 并且增量为 2。因此在最坏的情况下,有 X /2 个循环。我的解释有什么错误吗?
【解决方案2】:

它们在数字表示的长度上是指数的,因为表示本身是指数的,下一个数字是 10n+1 或 2n+1 或其他.线性搜索的内容要多得多,仅此而已。

【讨论】:

  • 表示本身是指数的?这是什么意思。你指的是下一个素数的出现吗?
  • 你的回答很有道理。这在关于整数分解的维基百科页面中提到:en.wikipedia.org/wiki/…
  • 为了扩展,如果我们正在考虑与表示长度相关的时间复杂度,您的回答是有意义的。我也明白这是针对大量数字的相关措施。但是,为什么在考虑算法的一般时间复杂度时这是相关的度量?换句话说,当试除法(我认为或多或少是 OP 的算法)具有 O(sqrt(N)) cs.stackexchange.com/questions/50326/…
  • @JohnHenderson 这特别是因为密码学,到目前为止,分解的最重要的使用,增加密钥的长度很容易,最大的问题是“增加密钥的长度有什么影响有吗?”。这有点像字符串操作,你通常不关心单个字符有什么值,你关心它们有多少。
  • 谢谢@jthill,有道理。作为其他人的参考,我还在 math.stackexchange 上找到了这个答案,它进一步讨论了这个问题:math.stackexchange.com/questions/1624390/… 特别是其中一个 cmets(“复杂性总是由输入的长度计算。只是在大多数情况下,输入是 ? 元素的某种数据结构(例如,数组)。所以这种类型的输入的长度是 ?")对我很有帮助。
猜你喜欢
  • 2018-05-12
  • 2017-04-12
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 2022-01-21
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多