如何计算此代码的时间复杂度

lh80um4z  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(397)

我必须使用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("*");
}
lsmd5eda

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) .

相关问题