`continue`语句的复杂度是多少?

时间:2019-05-13 21:14:00

标签: c# for-loop time-complexity complexity-theory continue

我知道这很简单,但这只是我想到一个更大的问题时想到的。另外,如何验证呢?

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;
   }
}

1 个答案:

答案 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
    }
}

“外部继续”将影响整个操作的性能(与gotoif的倒数)-在这种情况下,O(n)由于外部循环最多运行内部循环3次- O(n + 3 * n)与O(n)相同。

“内部继续”对性能估算没有影响,因为无论如何必须为每个项目运行循环。

类似的推理适用于break-除非会在循环的某个恒定部分缩短循环(即在从N中检查出日志N个项目后总是停止),否则不会影响性能估算。