[bcn-pm] Complejidad de algoritmos

Salvador Fandiño salvafgaterra.es
Dij Jun 14 03:28:37 PDT 2007


Enrique Nell wrote:
> Hola Alex
> 
>> Jo conec un profiler que segurament no és tan potent com el que
>> tu vols però que potser et serveix per començar (és útil per saber
>> en quins punts del codi es perd més temps i per tant quins punts
>> caldria optimitzar):  http://search.cpan.org/dist/DProf/
> 
> Sí, pero lo que me interesa es obtener una estimación del tiempo
> aproximado que tardará en ejecutarse un algoritmo, independientemente
> de su eficiencia. Por ejemplo, si hago un programa que realiza algún
> tipo de operación con arrays de cadenas y lo pruebo con tamaños de
> arrays razonables, quiero poder indicar al típico individuo arrojado
> (como yo en mi juventud) cuánto tardará en procesar un tamaño
> razonable x 1000 antes de que lo intente, por si no le conviniera, o
> directamente impedírselo.

Hola Enrique,

Puedes, establecer un modelo matematico para la complejidad de tu 
algoritmo y con algunos benchmarks ajustarlo.

Por ejemplo, si tienes un script que ordena algo, tipicamente su 
complejidad sera O(NlogN), osea, que el tiempo que tardara en ejecutarse 
es una funcion

    t(n) = A + B * n + C * n log n

Si mides los tiempos de ejecucion del script para distintos valores de 
n, tendras un conjunto de pares (n1, t1), (n2, t2)...(nm, tm) con los 
cuales podras ajustar los valores de A, B y C minimizando el error.

Luego, podras calcular el tiempo de ejecucion estimado de tu script, sin 
mas que calcular t(n) para el n que quieras.

De todas formas, al final se trata de una extrapolacion, y como el 
modelo matematico utilizado es muy simple los resultados solo seran 
validos en un entorno limitado. Osea, que si haces benchmarks para n = 
1, 2, 4, 8, 16, 32, 64 y 128, probablemente, el resultado que obtengas 
para n = 256, 512 o 1024 no se aleje mucho de la realidad, pero para n = 
1_000_000 es probable que no tenga nada que ver.

Tambien tienes que considerar que como comentaban en otro correo, los 
tama~nos de memoria de cache, RAM y swap tambien afectan a la velocidad 
de un algoritmo. La misma aproximacion que comentaba antes puede ser 
utilizada para estimar el consumo de memoria.

- Salva




> 
> Enric
> _______________________________________________
> llista dels Barcelona-pm
> Barcelona-pm en pm.org
> http://mail.pm.org/mailman/listinfo/barcelona-pm
> BCN Perl Mongers: http://barcelona.pm.org
> 



Més informació de la llista de correu Barcelona-pm