我遇到以下问题的问题
考虑以下嵌套循环结构。按照它的方式对其效率进行分类 变量n使用“big-o”表示法。假设省略号表示的语句 (...)需要四个主存储器访问(每个需要一微秒)和两个 磁盘文件访问(每个需要一毫秒)。以毫秒表示金额 如果n为1000,则该构造需要执行的时间。
x = 1;
do
{
y = n;
while (y > 0)
{
...
y--;
}
x *= 2;
} while (x < n*n);
答案 0 :(得分:1)
y的内部循环是O(n)。
外环以x = 1,2,2 ^ 2,2 ^ 3,... 2 ^ k <1运行。 n * n。因此它在O(log(n * n))中运行,其为O(2 * log(n))
因此复杂性为O(n * log(n))
答案 1 :(得分:0)
只是为其他答案添加一些解释,代码的一个显着部分是x * = 2;即加倍。所以这部分不是线性的。所以你应该考虑log2。
因此,x将在log2(n * n)中达到n * n。 = log2(n ^ 2)= 2 x log2(n)。
y倒计时是线性的 - 因此是O(n)
循环中有一个循环,因此您可以将两个操作相乘:
n * 2×log2(n)= O(n * 2 * log2(n))。然后你拿出常数因子得到: O(n * log2(n))