我知道这很简单,但这只是我想到一个更大的问题时想到的。另外,如何验证呢?
List<int> items = new List(){10, 11, 32, 1, 101};
for(int x = 0; x < items.Length; x++)
{
for(int y = 0; y < items.Length; y++)
{
continue;
}
}
答案 0 :(得分:0)
Continue
本身对复杂度没有影响,因为它必须(在恒定时间内)作为循环迭代的一部分执行,并且无论是否具有continue
,相应的循环仍将具有相同的复杂度(即样本的内循环仍为O(len_items))
如果某些代码在某些情况下有条件地执行并且continue
缩短了一些迭代,则可能会影响复杂性:
for(int x = 0; x < items.Length; x++)
{
if (x > 3 )
continue; // outer continue
for(int y = 0; y < items.Length; y++)
{
continue; // inner continue
}
}
“外部继续”将影响整个操作的性能(与goto
或if
的倒数)-在这种情况下,O(n)由于外部循环最多运行内部循环3次- O(n + 3 * n)与O(n)相同。
“内部继续”对性能估算没有影响,因为无论如何必须为每个项目运行循环。
类似的推理适用于break
-除非会在循环的某个恒定部分缩短循环(即在从N中检查出日志N个项目后总是停止),否则不会影响性能估算。