困惑于Big-O表示法

时间:2012-02-10 05:52:34

标签: java algorithm big-o computer-science

好吧,我有一个快速的问题,所有程序员都在为一个简单的问题做准备。

对于我的计算机科学II课程,我们正在阅读Big-Oh表示法并且我已经完成了大部分工作,但我仍然对这些示例的一些语义感到困惑。

这里的一切都是用Java编写的。

我的教授在课堂上给了我们这些例子,但幸运的是,我没有写下答案。

A)

int count = 0; 
    for (int i = 1; i <= n; i++) 
        for (int j = n; j > 1; j-­--­-) 
            for (int k = 1; k < n; k = k + 2) 
                count++;

b)中

int count = 0; 
for (int i = 1; i <= n; i++) 
    for (int j = n; j > 1; j-­--­-) 
        for (int k = 1; k < 1000; k = k + 2) 
            count++;

c)中

int count = 0; 
    for (int i = 1; i <= 1000000; i++) 
        for (int j = i; j > 500; j-­--­-) 
            for (int k = 1; k < 10500; k = k + 2) 
                count++;

d)

int count = 0; 
int j = 1; 
for (int i = 1; i < n; i++) { 
        while (j < n) { 
            j++;
            count++; 
        } 
        j = 1; 
    }

E)

int count = 0; 
int i = n; 
while (i > 1) 
{ 
    count++; i = i / 2; 
}

好的,所以这是我的答案/思考过程:

a)N * N *(N / 2)= N ^ 3/2,全部简化为O(N ^ 3)符号

b)N * N * 500,All简化为O(N ^ 2)

c)这是我主要混淆你有三个for循环,但都迭代确切次数的那个。我的猜测是O(1),但我不知道......

d)N * N = N ^ 2,所以O(N ^ 2)

e)每次除以一半,所以log(n)= O(log(n))[都是基数2]

那么,任何人都可以查看我的思考过程,看看我是否遗漏了什么?非常感谢你!

2 个答案:

答案 0 :(得分:1)

是的(C)是O(1)因为它是所有常数。

答案 1 :(得分:0)

在所有这些示例中,count每个工作单位增加一次。如果你能找出countn之间的关系,那么你就知道了程序的渐近顺序。

你做得很好。下一步是检查您的计算与现实。运行不同n值的代码,打印count,然后根据实际数据检查您的工作。