【发布时间】:2014-06-05 16:51:00
【问题描述】:
所以我编写了这个循环,但我无法分析其最坏情况的时间复杂度。任何帮助将不胜感激。
factor 是任意数字 primeNumber 是介于 2 和因子原始值之间的素数列表
for (int i = 0; i < primeNumbers.size() - 1; i++) {
prime = primeNumbers.get(i);
if(prime<=factor) {
if (factor % prime == 0) {
factor = factor / prime;
divisors.add(prime);
i = 0;
}
if (factor <= 3)
break;
}
else
break;
}
【问题讨论】:
-
什么是
factor,它在哪里定义? -
好吧,假设
primeNumbers的任意大小为n,它最多可以运行多少次? -
是的,刚刚对其进行了修改并添加了更多信息,是的,我正在尝试查看它最多可以运行多少次
-
它最多运行 (primeNumbers.size() - 1) 次。这意味着它是 O(n)。
-
说真的......你最糟糕的情况是
primeNumbers中的每个元素都小于factor,所以它是 O(N)。另外,由于您不会更改primeNumbers的状态,因此最好使用增强的for循环,因为某些列表可能会遍历List#get中的整个列表,或者使用Iterator。
标签: java time complexity-theory analysis