📅  最后修改于: 2020-12-10 03:46:09             🧑  作者: Mango
要分析编程代码或算法,我们必须注意到每条指令都会影响算法的整体性能,因此,必须单独分析每条指令以分析整体性能。但是,每个编程代码中都有一些算法控制结构,它们具有特定的渐近分析。
一些算法控制结构是:
假设我们的算法由A和B两部分组成。A花费时间t A ,B花费时间t B进行计算。总计算“ t A + t B ”是根据顺序规则进行的。根据最大规则,该计算时间为(max(t A ,t B ))。
例:
总时间的计算是根据条件规则“ if-then-else”进行的。根据最大规则,此计算时间为max(t A ,t B )。
例:
for循环的一般格式为:
For (initialization; condition; updation)
{
Statement(s);
}
外循环执行N次。每次执行外循环时,内循环执行M次。结果,内部循环中的语句总共执行N * M次。因此,两个循环的总复杂度为O(N2)
考虑以下循环:
for i ← 1 to n
{
P (i)
}
如果(P I )的计算时间t i是“ i”的函数,则该循环的总计算时间不是通过乘法给出,而是通过求和即
For i ← 1 to n
{
P (i)
}
需要
如果算法由嵌套的“ for”循环组成,则总计算时间为
例:
考虑以下“ for”循环,计算以下内容的总计算时间:
For i ← 2 to n-1
{
For j ← 3 to i
{
Sum ← Sum+A [i] [j]
}
}
解:
计算总时间为:
分析循环的简单技术是确定所涉及变量的函数,其值每次减小。其次,要终止循环,必须将值设为正整数。通过跟踪函数的值减少多少次,可以获得循环的重复次数。分析“ while”循环的另一种方法是将它们视为递归算法。
1. [Initialize] Set k: =1, LOC: =1 and MAX: = DATA [1]
2. Repeat steps 3 and 4 while K≤N
3. if MAX
例:
计算n个整数数组中的最大元素的算法数组Max的运行时间为O(n)。
解:
array Max (A, n)
1. Current max ← A [0]
2. For i ← 1 to n-1
3. do if current max < A [i]
4. then current max ← A [i]
5. return current max.
该算法执行的原始运算的数量t(n)至少为。
2 + 1 + n +4 (n-1) + 1=5n
2 + 1 + n + 6 (n-1) + 1=7n-2
当A [0]是最大元素时,出现最佳情况T(n)= 5n。当元素按升序排序时,会出现最坏情况T(n)= 7n-2。
因此,我们可以应用c = 7和n 0 = 1的big-Oh定义,并得出其运行时间为O(n)。