这是我的问题,我已经设法为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
答案 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)
次。