我们什么时候必须考虑 运行 时间的常量

When do we have to consider the constants in running time

假设我有两个算法 A()B(),算法 A() 恰好采用 O(3n^2) 而算法 B() 采用 O(n^2)。虽然两种算法 运行 都在二次时间,但我们可以说算法 B 运行 比它快吗?

我理解我们在分析算法的运行宁时间时会忽略常量,但我想问一下在分析算法时需要考虑常量的情况。

谢谢

您可能想看看 this SO answer

来自那个答案:

In summary - since big-O only talks about relative classes of growth rates, it ignores the constant factor. However, those constants are absolutely significant; they just aren't relevant to an asymptotic analysis.

所以它在大 O 符号方面可能没有什么不同,但在现实生活中你的算法 B 确实 运行 更快。

你的两个算法具有相同的渐近复杂度,但一个肯定比另一个快。

在这种情况下,A 具有更大的常量,因此它可能更慢,但可能还有其他因素在起作用(例如实现细节,包括算法实现和硬件)运行 on) 这可能会左右平衡。