java - java代码的时间复杂度

标签 java algorithm time-complexity

我正在 coursera 上学习算法类(class),但我被困在这个特定问题上。我应该找出这段代码的时间复杂度。

int sum = 0

 for (int i = 1; i <= N*N; i = i*2)

  {
     for (int j = 0; j < i; j++)
           sum++; 
  }

我在eclipse里面查过,对于任意一个N值,sum语句执行的次数都小于N

final value of sum:
for N=8 sum=3 
for N=16 sum=7 
for N=100000 sum=511

所以时间复杂度应该小于N 但是给出的答案是N的2次方,这怎么可能?

到目前为止我做了什么:

第一个循环将运行 log(N^2) 次,因此第二个循环将执行 1,2,3.. 2 logN

最佳答案

第一个内部循环将是 1 + 2 + 4 + 8 .. 2^M,其中 2^M 是 <= N * N。

2 到 N * N 的幂之和大约为 2 * N * N 或 O(N ^ 2)

注意:当 N=100000 时,N*N 会溢出,因此其结果具有误导性。如果您认为溢出是问题的一部分,那么总和对于大数来说是相当随机的,因此您可以争论它的 O(1),即如果 N=2^15,N^2 = 2^30 并且总和将为整数.MAX_VALUE。没有更高的 N 值会得到更高的总和。

关于java - java代码的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925316/

相关文章:

python - 在无序列表中查找最长的有序序列

javascript - 如何制作没有节点边缘重叠的力导向布局

algorithm - 使用堆在 O(N log K) 时间内找到前 K 个元素

javascript - 一个数组加上 arr.indexOf() 另一个数组的循环时间复杂度

java - 当应该显示 editorPane (html) 时,scrollPane 随机保持灰色

java - 我正在编写一个名为discount.java的类,并且在处理数量和价格的负值时遇到问题

java - 如何检查文件夹中是否存在特定扩展名的文件

java - AWS Lambda用于将excel转储到数据库中

algorithm - 读取 N 个单词并打印所有字谜的算法

haskell - Fingertree 头复杂度