【发布时间】:2010-11-22 23:00:25
【问题描述】:
也许我对 Big-O 表示法的理解有误(我已经有一段时间没有学习算法课程了),但以下内容对我来说从来没有太多意义:
这将被视为 O(n^2):
for (int i = 0; i < num_1; i++)
{
for (int j = 0; j < num_2; j++)
{
cout << i << " " << j << endl;
}
}
这将被视为 O(n):
for (int z = 0; z < num_3; z++) { cout << z << endl; }
我的问题是涉及到实际条款。让我们假设num_1 = 10; num_2 = 20; num_3 = 1000;。在这种情况下,第一个示例 O(n^2) 的内部迭代次数将比 O(n) 第二个示例少得多。
更笼统地说:当num_3 > num_1 * num_2 时,O(n^2) sn-p 比 O(n) sn-p 少。在现实世界的应用程序中,这两个 sn-ps 可能正在执行两个非常独立的任务,其中 num_1、num_2 和 num_3 的功能界限有很大不同。嵌套的 num_1 和 num_2 可能会循环 0 到 255 之间的变量值,但 num_3 可能经常出现超过一百万的值。
在不考虑实用或操作变量的情况下,为什么编码人员应该/会相信基于Big-O表示法的算法或sn-p边界?
【问题讨论】: