算法运行时间上限的缩放告诉您什么?

What does scaling of the upper bound of your algorithm's runtime tell you?

假设你唯一知道的是你的算法在最坏的情况下运行 O(n^2) 时间。根据这个事实,您知道对于某些 C > 0,上限看起来像 Cn^2。因此,您知道算法的上限是如何缩放的,也就是说,如果将输入大小加倍,则上限会增加四倍。

问题:如果你知道上限的缩放方式,你能回答什么实际问题?我只是不明白这种特殊知识是否对某些方面有帮助。

如果您对算法性能的了解是 O(n2),那么实际上,您知道的是:

如果系统随着时间的推移变得缓慢,并且数据库的大小是以前的 10 倍,那么问题很可能是您的算法花费了 100 倍的时间。

如果您知道在 O(²) 中 而不是 的替代算法,那么您可能会得出结论,存在一些最小输入大小,超过该值您的算法将优于替代算法算法。

这是因为如果 () 不在 O(²) 中,则不存在 N 这样对于每个 > 我们都会有 () < ²。所以你也不会找到 () < 或 () < log, ...等。所以 () 不会是 O(1), O(), O(log), ... 因为它不是 O(²).

尽管如此,您的算法优于替代算法的输入大小可能在天文数字上如此之大,以至于不实用,您仍然更喜欢替代算法。


还请注意,当编码人员谈到最坏情况下的时间复杂度时,他们通常表示这是最坏情况下的 界限。例如,如果有人提出一种最坏情况下时间复杂度为 O(²) 的排序算法,则意味着它没有更有效的排序算法所具有的最坏情况下时间复杂度 O(log)。