¿Cómo realizar un análisis algorítmico en un programa? ¿Cómo calcular su complejidad temporal?

Complejidad del algoritmo estilo cursiva
complejidad del algoritmo es una medida de la eficiencia del algoritmo, el algoritmo es una base importante para la evaluación de los pros y los contras. La complejidad de un algoritmo se refleja en la cantidad de recursos informáticos necesarios para ejecutar el algoritmo. Cuantos más recursos se necesiten, mayor será la complejidad del algoritmo; por el contrario, cuanto menores sean los recursos necesarios, más Cuanto menor sea la complejidad del algoritmo.

Los recursos informáticos más importantes son los recursos de tiempo y espacio (es decir, memoria). Por lo tanto, la complejidad del algoritmo se divide en complejidad temporal y complejidad espacial.
Para cualquier problema dado, diseñar un algoritmo con la menor complejidad posible es un objetivo importante que perseguimos al diseñar el algoritmo; por otro lado, cuando existen múltiples algoritmos para un problema dado, elija el que tenga la menor complejidad. , Es un criterio importante que seguimos a la hora de seleccionar algoritmos para adaptar. Por lo tanto, el análisis de complejidad del algoritmo tiene una importancia orientativa importante y un valor práctico para el diseño o la selección del algoritmo.
En resumen, en el proceso de aprendizaje del algoritmo, primero debemos aprender a analizar el algoritmo para determinar o juzgar los pros y los contras del algoritmo.

1. Complejidad del tiempo:

    例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. Complejidad espacial:

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

Supongo que te gusta

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