Algorithm 为什么程序员更喜欢O(N^3)而不是O(N^2)
我在准备期末考试,档案中有一个问题我找不到答案: 一种算法运行时间的增长顺序为O(N^2);这个 第二个算法的运行时间的增长顺序是O(N^3)。列表 三个令人信服的(逻辑的,令人信服的)理由为什么程序员会 更喜欢使用O(N^3)算法而不是O(N^2)算法Algorithm 为什么程序员更喜欢O(N^3)而不是O(N^2),algorithm,time,big-o,time-complexity,Algorithm,Time,Big O,Time Complexity,我在准备期末考试,档案中有一个问题我找不到答案: 一种算法运行时间的增长顺序为O(N^2);这个 第二个算法的运行时间的增长顺序是O(N^3)。列表 三个令人信服的(逻辑的,令人信服的)理由为什么程序员会 更喜欢使用O(N^3)算法而不是O(N^2)算法 我可以想到以下三个原因: 易于初始实施 便于将来的维护 O(N^3)算法可能比O(N^2)算法具有更低的空间复杂度(即,它使用更少的内存) 可能是#1原因:因为O(N2)算法有足够高的常数,对于预期任务的大小,O(N3)版本更快。另一件事是,
我可以想到以下三个原因:
- 易于初始实施
- 便于将来的维护
- O(N^3)算法可能比O(N^2)算法具有更低的空间复杂度(即,它使用更少的内存)
a
O(N^2)
可能有一个很大的常数因子,这使得它无法实际使用(如果N
足够小,正如托班所指出的)以下是一些例子,让你相信O(N³)在某些情况下比O(N²)更好
除了已经发布的答案之外,我还想提到缓存行为。由于重复的缓存未命中,特定的内存访问模式可能会慢得多,因此理论上更慢的算法和更友好的缓存访问模式的性能要好得多。选择一种算法的唯一原因不是运行时间的增长顺序。您必须分析:
- 这是多么容易实现啊
- 所需的空间
- 现实生活中的输入有多大(有时,只有在实际中从未出现过的输入大小时,才能观察到时间差)
100000/10
。现在在纸上用长除法。哪个更快?在你的头脑中划分21714/66
。现在在纸上用长除法。哪个更快?最快的方法取决于您的输入。第一个例子类似于O(n^3)
。但它对好的数字很有效。第二个例子类似于O(n^2)
。一般来说,它有更好的性能,但您不想将其用于简单的除法。