需要帮助渐近分析

时间:2018-04-06 08:47:50

标签: algorithm asymptotic-complexity

在渐近分析中,我们总是讨论大于常数值的输入大小。这些大输入可能永远不会提供给您的软件,并且算法渐渐变慢,总能更好地满足您的特定情况。因此,您最终可能会选择渐近速度较慢但速度较快的算法。这是什么意思?

1 个答案:

答案 0 :(得分:1)

对于常数值在您的上下文中的含义,请比较这两种算法的渐近分析结果:

Algorithm A -> O(5*n^2)
Algorithm B -> O(2^n)

现在为了更好地理解,请检查它们的增加方式:

n | Algorithm A | Algorithm B
1 | 5           | 2
2 | 20          | 4
3 | 40          | 9
4 | 90          | 16
5 | 125         | 32
6 | 180         | 64
7 | 245         | 128
8 | 320         | 256
9 | 405         | 512 <-- Threshold
10| 500         | 1024

您可以将这些数字视为运行算法所花费的时间,较低的数字意味着更快的算法。如您所见,n<=8的{​​{1}}数字大于Algorithm A。因此,如果您的输入集太小,那么您可以使用Algorithm B并获得更好的结果。但是,如果您的输入变大,在这种情况下Algorithm Bn>=9的结果将变得比Algorithm B更差。因此,对于更大的输入,Algorithm A效果更好。在您的问题上下文中,常量值表示像Algorithm A这样的数字,它可以为比较算法创建此阈值。

作为旁注,当您渐近分析算法时,始终一个常数值,例如9乘以您的分析结果,例如C。如果输入数据很小,此常量值通常会对选择哪种算法更合适产生重大影响。只是不要将这个常数值误认为你的问题背景中的那个。