我们什么时候必须考虑 运行 时间的常量
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) 这可能会左右平衡。
假设我有两个算法 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) 这可能会左右平衡。