Complexidade do algoritmo do estilo itálico, a
complexidade do algoritmo é uma medida da eficiência do algoritmo, o algoritmo é uma base importante para a avaliação dos prós e contras. A complexidade de um algoritmo é refletida na quantidade de recursos de computador necessários para executar o algoritmo. Quanto mais recursos necessários, maior a complexidade do algoritmo; por outro lado, quanto menor os recursos necessários, mais Quanto menor a complexidade do algoritmo.
Os recursos mais importantes do computador são os recursos de tempo e espaço (isto é, memória). Portanto, a complexidade do algoritmo é dividida em complexidade de tempo e complexidade de espaço.
Para qualquer problema, projetar um algoritmo com a menor complexidade possível é um objetivo importante que buscamos ao projetar o algoritmo; por outro lado, quando houver vários algoritmos para um determinado problema, escolha aquele com a menor complexidade , É um critério importante que seguimos ao selecionar algoritmos para adaptar. Portanto, a análise de complexidade do algoritmo tem um importante significado de orientação e valor prático para o projeto ou seleção do algoritmo.
Em suma, no processo de aprendizagem do algoritmo, devemos primeiro aprender a analisar o algoritmo para determinar ou julgar os prós e os contras do algoritmo.
1. Complexidade de tempo:
例1:设一程序段如下(为讨论方便,每行前加一行号)
(1) for i:=1 to n do
(2) for j:=1 to n do
(3) x:=x+1 ......
试问在程序运行中各步执行的次数各为多少?
解答:行号 次数(频度)
(1) n+1
(2) n*(n+1)
(3) n*n
可见,这段程序总的执行次数是:f(n)=2n2+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果 f(n)的值很小,则算法优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。
2. Complexidade do espaço:
例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:
算法1:
for i:=1 to n do
b[i]:=a[n-i+1];
for i:=1 to n do
a[i]:=b[i];
算法2:
for i:=1 to n div 2 do
begin
t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t
end;
算法1的时间复杂度为2n,空间复杂度为2n
算法2的时间复杂度为3*n/2,空间复杂度为n+1
显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)。