找到Big-O表示法的效率

时间:2013-09-25 18:21:43

标签: algorithm data-structures time-complexity big-o

我遇到以下问题的问题

考虑以下嵌套循环结构。按照它的方式对其效率进行分类 变量n使用“big-o”表示法。假设省略号表示的语句 (...)需要四个主存储器访问(每个需要一微秒)和两个 磁盘文件访问(每个需要一毫秒)。以毫秒表示金额 如果n为1000,则该构造需要执行的时间。

x = 1;
do
{
    y = n;
    while (y > 0)
    {
    ...
        y--;
    }
    x *= 2;
} while (x < n*n);

2 个答案:

答案 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))