繁体   English   中英

for循环内部while的时间复杂度?

[英]Time complexity of while inside for loop?

我有以下算法:

for(int i=0; i<list.size(); i++){
 String cur = list.get(i);
 int cnt =0;
 while(output.contains(cur)){
  cur= cur.substring(0,5) + String.valueOf(cnt);
  cnt++;
 }
 output.add(cur);
}

并不是说“列表”和“输出”是 ArrayList。

我认为时间复杂度是 O(n^2)。 但是内部有 output.contains(cur) 的 while 循环呢?

这个算法的复杂度似乎取决于output列表的初始内容:

  • output为空, while循环不执行,复杂度为O(N) ,其中 N 是list的大小

  • listoutput的制作符合output.contains(cur)条件 例如,

List<String> list = Arrays.asList("abcde0", "abcde1", "abcde2", "abcde3", "abcde4", "abcde5", "abcde6");
List<String> output = new ArrayList<>(list);

output的大小将增长,因此迭代次数将如下所示:

1) n+1
2) n+1 + n+2 = 2 (n+1) + 1
3) n+1 + n+2 + n+3 = 3 (n+1) + 3
4) n+1 + n+2 + n+3 + n+4 = 4 (n+1) + 6
...
n) n (n+1) + (1 + n-1)*(n-1)/2 = n (n+1) + n (n - 1)/2 = n (3n + 1)/2 

因此,在这种情况下(可能不是最坏的情况),复杂度可能是 O(N^2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM