为什么O(n ^ 2)算法在同一输入上比O(n)算法运行得更快?

Daw*_*wan 9 sorting algorithm

编写A和B两种算法来解决同样的问题.算法A是O(n).算法B是(n ^ 2).您希望算法A更好地工作.

但是,当您运行同一台计算机的特定示例时,算法B运行得更快.给出理由解释这样的事情是怎么发生的?

Ita*_*aro 27

算法A,例如可以在运行时间10000000*nO(n).
如果算法B,运行在n*n其是O(n^2),A将是每较慢n < 10000000.

O(n), O(n^2) 是渐近运行时描述行为的时候 n->infinity

编辑 - 示例

假设您有以下两个功能:

boolean flag;

void algoA(int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 1000000; j++)
      flag = !flag;

void algoB(int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      flag = !flag;
Run Code Online (Sandbox Code Playgroud)

algoA具有n*1000000标志翻转操作,使得它O(n)algoB具有n^2标志翻转操作,使得它O(n^2).

只是解决不平等问题1000000n > n^2,你就可以解决这个问题n < 1000000.也就是说,该O(n)方法会更慢.

  • 谢谢您的帮助!你是一位好老师。很好的解释。谢谢 (2认同)