Tenga en cuenta que no tengo un "problema" y no estoy buscando "otra forma de encontrar la gran O de mi algoritmo".¿Se puede encontrar el valor de un algoritmo mediante programación mediante el análisis de sus perfs?
Lo que me gustaría saber es si sería posible escribir un programa al que se le pasarían puntos de datos que serían medidas de perforación de un algoritmo para varios tamaños de entrada: (n,time taken to solve problem for n)
y eso determinaría la complejidad de tu algoritmo
Por ejemplo, aquí es lo que podría ser la entrada (que podría ser mucho más grande, en realidad es sólo un ejemplo, ese no es el punto de la pregunta):
36 000 took 16 ms
109 000 took 21 ms
327 000 took 68 ms
984 000 took 224 ms
2 952 000 took 760 ms
8 857 000 took 2305 ms
26 571 000 took 7379 ms
79 716 000 took 23336 ms
El uso de este tipo de datos, es posible escribir un programa que diga si tenemos, por ejemplo, un O(n)
, log(n)
, n log(n)
o n!
algo?
Su escala debe tener en cuenta que existen límites en su sistema que causan cambios radicales cuando se pasan.Ejemplos: ser capaz de caber dentro de la memoria caché de la CPU y no, ser capaz de caber en la memoria física o ser intercambiado en el disco, pudiendo distribuirse a más núcleos y no hacerlo. Deberá conocer estos límites para ver su influencia en sus datos. –