哪个“for”循环具有更好的时间复杂度?

Posted

技术标签:

【中文标题】哪个“for”循环具有更好的时间复杂度?【英文标题】:Which "for" loop has a better time complexity? 【发布时间】:2017-02-01 21:46:20 【问题描述】:
    int i;
    for(i=0;i<n;i++)
    
     if(i==number);
       break;
    

    for(i=0; ;i++)
    
    if(i==number)
    break;
    

删除 for 循环中的比较部分是否会影响时间复杂度?

【问题讨论】:

第一个是O(n)。第二个是O(max(number)) 它将在 i==number 时终止,因为有一个 break 语句。它实际上是一个包含“数字”的数组。 谢谢 Eugene Sh.,你能解释一下吗? 第一个将最多运行n 次。第二个将最多运行number 的最大可能值。 两个循环中的数字相同,并且除了 for 循环中的比较语句之外的所有内容都相同。那么它们将具有相同的时间复杂度? 【参考方案1】:

你不能准确地说哪个更快......

第一个的时间复杂度是O(min(n, number)),第二个是O(number)


如果 n 大于(或等于)数字,则第一个将等于第二个。

首先:O(number)(因为数字小于 n,min(n, number) = number 秒:O(number)

如果 n 小于 number,第一个会更快(因为它也在 n 中停止)。

首先:O(n)(因为 n 小于数字,min(n, number) = n 秒:O(number)

总的来说,第一个会更快。

如您所见,删除 for 外观中的比较确实会有所不同,鉴于第二种情况,它们的复杂性变得不同,这一点非常明显。

【讨论】:

谢谢丹尼尔,两个循环的时间也一样吗?还是有什么不同? 正如我解释的那样,如果数字大于n,时间会有所不同,否则时间复杂度是相同的

以上是关于哪个“for”循环具有更好的时间复杂度?的主要内容,如果未能解决你的问题,请参考以下文章

哪个更好,单 for 循环或双 for 循环迭代二维数组? C++

遇见的题目——关于时间复杂度

三个嵌套 for 循环的时间复杂度

一个简单for循环的时间复杂度

一个简单for循环的时间复杂度

关于for循环的时间复杂度