[英]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
的大小
list
和output
的制作符合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.