两个非嵌套循环的大哦符号

时间:2014-02-06 18:05:29

标签: big-o

这是我的问题,我已经设法为a部分提供答案,但对于b部分,我对我对b部分的回答并不十分自信。

在最近的一起法庭案件中,一名法官引用了一个城市的蔑视,并在第一天订购了2美元的罚款。 接下来的每一天,直到城市遵循法官的命令,这个数字被平方 (即,进展如下:$ 2,$ 4,$ 16,$ 256,$ 65,536,......)。 一个。那天N会有什么? 湾到达D美元需要多少天(一个很大的答案会做)?

答案:2 ^(2 ^ n-1)

对于答案b,我做了以下程序来找到大哦。

for (int i = 0; i < n - 1; i++) {
    result = 2 * result;
}
printf("%d\t", result);

for (int j = 0; j < result; j++) {
    res = 2 * res ;
}
printf("%d\n", res);

我计算出第一个循环的大哦是sumation of n 并且因为第二个循环运行第一个循环的2 ^ n-1倍,所以它的大哦是2 ^ n并且将它们加起来它们变成(2 ^ n)+ n

3 个答案:

答案 0 :(得分:1)

根据我的算法,我的答案是O(N)

int days=5;
int fine = 2;
for(int i=0; i<days-1; i++)
   fine =  fine * fine;

cout << fine;

答案 1 :(得分:1)

第一个循环运行n-1次,第二个循环运行2^(n-1)次。时间复杂性 是这些的总和(n-1) + 2^(n-1) = O(2^n + n) = O(2^n)

这个问题似乎并没有要求时间复杂性。它在问 在罚款达到D美元之前会过多少天。这是相反的 答案a):O(log log D)(例如,log(log(65536)) + 1天后达到65536美元。

答案 2 :(得分:1)

您真的不需要任何软件来回答这些问题。 Big O是一个恰好用于软件开发的数学术语。

让我们来看看进展情况:

2     = 2^1  = 2^(2^0)
4     = 2^2  = 2^(2^1)
16    = 2^4  = 2^(2^2)
256   = 2^8  = 2^(2^3)
65536 = 2^16 = 2^(2^4)

回答问题a。

n天的罚款为2^(2^(n-1))

你可以像这样编程:

pow(2, pow(2, n-1));

回答问题b。

x = log2 (log2 D) + 1

如果我们不计算第一天,则没有“+ 1” 这将返回正实数,因此您可能希望根据要求进行细化。

现在,在大O表示法中,它将是O(log(log)),它描述了值的增长方式。这意味着当输入(在这种情况下为D)乘以n时,函数的值最多会增加log(log n)次。