我一直无法解决以下问题,但是我不确定如何从那里开始:
以下程序多少次打印出“ Hi”?也就是说,运行时间是多少? (以Big-O表示法)
int i = 1;
int j = 1;
while(i <= n )
{
j+= j;
int k = 1;
while (k <= j)
{
System.out.println("Hi");
k = k +1;
}
i = i + 1;
}
我能够推断出该程序将产生x = 1到n (2 ^ x)个Hi数量的求和。这也是运行时间吗?还是我应该将代码分解为两个求和,其中一个从i = 1到n,另一个是....(我不知道)。谢谢您的帮助!
答案 0 :(得分:1)
您的运行时总和看起来正确。那么问题是如何简化它。幸运的是,我们有这个事实:
2 0 + 2 1 + 2 2 + ... + 2 n-1 = 2 n -1。
忽略将这个总和替换为总和的所有错误,由于big-O表示法,我们可以这样做,我们看到“ Hello!”被打印出Θ(2 n )次。
答案 1 :(得分:0)
然后您可以尝试这样
int i = 1;
int j = 1;
long startTime = System.nanoTime();
while(i <= n )
{
j+= j;
int k = 1;
while (k <= j)
{
System.out.println("Hi");
k = k +1;
}
i = i + 1;
}
long endTime = System.nanoTime();
System.out.println("time taken in nano seconds" + endTime-startTime);