Como realizar a análise algorítmica em um programa? Como calcular sua complexidade de tempo?

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)。

Acho que você gosta

Origin blog.csdn.net/weixin_43730875/article/details/106904103
Recomendado
Clasificación