哪个“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”循环具有更好的时间复杂度?的主要内容,如果未能解决你的问题,请参考以下文章