选择要使用的算法

时间:2015-04-30 15:37:42

标签: algorithm big-o time-complexity

假设您有两种算法(A1和A2)

A1 = Omega(n)
A2 = O(n^2)

这些算法确定数字n是否是素数。 你应该选择哪一个?为什么?

并且当使用A1和A2对大量运行测试时,注意到运行时间没有差异。这怎么可能?

1 个答案:

答案 0 :(得分:2)

  

这些算法确定数字n是素数还是   不。你应该选择哪一个?为什么?

由于多种原因,所提供的算法规范不够丰富。

  1. O(n ^ 2)和Omega(n)没有足够的信息来选择哪个具有更好的渐近复杂度。例如,您可以在Theta(n)中运行A1,在Theta(n^2)中运行A2,并且A1将渐近地优于A2。另一方面,您可以在Theta(n^3)中运行A1,在Theta(log^3(n))which is the best known algorithm for testing primality of a number)中运行A2。取决于哪些是真正的复杂性 - 答案会有所不同

  2. 此外,如果预期的输入是n的小值,我们对预期输入一无所知 - 大O符号(和大欧米茄)的信息量不大,因为它们只处理大价值。

  3. 然而,第二个确实给你一些上限,而第一个没有,所以这是一个奖金。虽然仍然不足以准确地说出哪个更好。