¿Cuál es la diferencia entre tener un buen algoritmo y no tener uno?

Hay varias diferencias, pero la más importante es probablemente la velocidad. Aquí hay un ejemplo simple pero muy poderoso:

Digamos que tengo una serie (ordenada) de números. Esta matriz tiene 2 mil millones (2.000.000.000) de elementos. Ahora quiero encontrar un cierto valor x en la matriz, o informar si no se encuentra.

Un mal algoritmo: simplemente recorreré la matriz de principio a fin, comparando cada valor uno por uno hasta que encuentre x o llegue al final. En el peor de los casos, tendré que hacer 2 mil millones de comparaciones por un solo valor. Si quiero hacer esto 100 veces, bueno … 200 mil millones de comparaciones. No es Buena idea

Un buen algoritmo: podemos usar un enfoque más inteligente llamado búsqueda binaria y siempre encontrar x en un máximo de 31 comparaciones.

Así que solo nos ahorramos 1999999969 operaciones simplemente cambiando nuestro algoritmo a uno bueno. Bastante ordenado, ¿verdad?

Básicamente, el tiempo necesario para completar el algoritmo y / o el tamaño del problema (como la memoria requerida).

Siguiendo los conceptos de complejidad computacional, un problema se vuelve más difícil con el crecimiento de las operaciones necesarias para resolverlo.

Un buen algoritmo permite un pequeño aumento de tiempo y recursos a medida que crece la entrada, mientras que un algoritmo malo requiere tiempo y recursos proporcionalmente más grandes.

Ejemplo: compare un buen agoritmo (logarítmico) con uno malo (polinomio) y uno muy malo (exponencial):

bueno: input = 16, time = 4 – input = 1024, time = 10 – input = 1,000,000, time = 20

malo: entrada = 16, tiempo = 256 – entrada = 1024, tiempo = 1,000,000 – entrada = 1,000,000, tiempo = 1,000,000,000,000

muy malo: input = 16, time = 6 * 10 ^ 5 – input = 1024, time = 10 ^ 2840 – input = 1,000,000, time = 16 ^ 1,000,000

“Un algoritmo” es simplemente “una forma de hacer algo” (el término no se aplica solo a la programación de computadoras), por lo que tener una mala forma de hacer algo no es tan bueno como tener una buena forma de hacerlo. ¿Por qué? Eso depende de lo que intente lograr y de los “algoritmos” que esté utilizando.

Por ejemplo, dos algoritmos para cortar el césped en su césped son 1) usar una cortadora de césped y 2) usar una tijera para cutículas. Si no le importa estar de rodillas, con la cabeza cerca del suelo, durante unos días, cortando una brizna de hierba a la vez, la segunda forma no es realmente “mala”, pero la primera forma es probablemente mejor.

Un algoritmo para multiplicar un número por 100 agregándolo 100 veces a sí mismo no es tan eficiente como multiplicarlo por 100. (También es mucho más código la primera vez, y lleva mucho más tiempo escribirlo, y da hay muchos más lugares en los que tener un error tipográfico).

Poseer un “Knuth” (y poder entenderlo).

Los algoritmos realmente malos no funcionan.

Los malos son ineficientes.

Los buenos funcionan, funcionan de manera eficiente y generalmente son bonitos y huelen a lilas.