对于循环时间复杂性

时间:2015-11-12 20:24:50

标签: performance time-complexity

我很想知道你是否有一个双向迭代for循环它是否会降低时间复杂度,如果是这样的话会减少多少?我知道大多数人都会为循环做标准

For (int index = 0; index < count - 1; index++)
{
    if ( Something(index) == "Hello")
    {
        return true
    }
}
Return False

如果你有一个双向迭代for循环以减少时间会有多好?

 int index2 = count - 1;
 For ( int index = 0; index < count - 1; index++)
 {
     if(Something(index) == "Hello" || Something(index2) == "Hello"
     {
         return true;
     }
     index2--;
     if ( index = index2)
     {
        return  false; 
     }  
 }

2 个答案:

答案 0 :(得分:1)

如果没有关于数组中底层数据的额外信息,则在数组查找和比较操作方面实际上将具有相同的复杂度顺序。复杂性的顺序不是关于循环运行的次数,而是执行的操作总数。第一个版本循环n次,每个循环执行1次操作,总共n*1次操作 。第二个循环执行n/2循环,每个循环有2个操作,这是(n/2)*2=n个操作。你可以看到它们都是一样的。

然而,当你实际实现它时,由于额外的缓存未命中,第二个版本在许多架构上会做得更糟。如果开始和结束都很远,你最终不得不回到主内存将其加载到缓存中。这比简单的比较贵得多。这就是编译器可能通过将代码转换为类似第一种形式的代码来优化代码的原因。

答案 1 :(得分:0)

时间复杂度是相同的,因为复杂性定义独立于任何常数因子(如2)。