我正在学习如何为算法的运行时间编写理论分析,我想知道对于以下代码是否正确:
while(high >= low) {
loop body here....
high--;
low++;
}
对于N个整数的数组,其中low从索引0开始,而high从索引N-1开始。循环体将运行(n / 2) times
,或者它将进行(n / 2) + 1
比较。说这个是正确的吗?如果是这样,为了获得整个函数的完整运行时分析,您是否会评估任何内部循环以创建运行时的完整函数?
答案 0 :(得分:1)
在代码中名为loop body here.....
的代码部分中,您可能会运行某些其他循环,其复杂度为某些f(n)。如果n为偶数,给定的while循环将运行 n / 2 次,如果n为奇数,则给出(n / 2)+ 1 次。
因此,外环的运行时间复杂度只是 O(n / 2)= O(n)。
现在,
loop body here.....
代码部分摆弄high
和/或low
,则此while循环的复杂程度会有所不同。loop body here.....
代码段是O(1)并且它没有修改high
和/或low
,则整个运行时间为O(n) loop body here.....
代码段是O(n)并且它没有修改high
和/或low
,那么整个运行时间就是O(n < SUP> 2 )。loop body here.....
代码部分为O(f(n))并且它没有修改high
和/或low
,则整体运行 - 时间是O(n * f(n))。