我必须使用big-o表示法计算下面代码的时间复杂度。我得到 O(nlogn)
作为回答。
输入/输出语句o(1)
内部循环o(n),因为它将输出1,2,4,8,…x(2^0+2^1+2^2..2^x)
外环路o(logn)
外部循环logn(n)内的语句
t(n)=o(1)+o(nlogn)=o(nlogn)
但我不确定。谁能帮帮我吗。
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number:");
int x = Integer.parseInt(sc.next());
for(int i=1 ; i<x; i*=2) {
System.out.print("*");
for(int j=0; j<i;j++) {
System.out.print(" ");
System.out.println("*");
}
1条答案
按热度按时间lsmd5eda1#
正如您所发现的,时间复杂度为:
T(x) = 1 + 2 + 4 + ... + 2^{log(x)}
但是你在上面总结的结果中有一个错误。作为T(x)
是一个带因子的几何级数2
:T(x) = 2^{log(x) + 1} - 1 = 2*x - 1
所以,这意味着T(x)
在Theta(x)
而且O(x)
.