¿Por qué es importante el análisis de algoritmos?

El análisis de algoritmos es necesario porque cada algoritmo tiene comportamientos diferentes. Para seleccionar el algoritmo correcto, necesita saber cuáles son esos comportamientos.

El ejemplo más clásico es la clasificación.

Bubble Sort es la forma más “obvia” de ordenar una lista. Se desplaza por la lista mirando pares de elementos individuales y los intercambia si están en el orden incorrecto. Si lo hace una vez, la lista no estará en orden, pero si lo hace suficientes veces, la lista finalmente se ordenará por completo.

Lamentablemente, también puede llevar mucho tiempo. En el peor de los casos, debe iterar sobre la lista de tamaño N N veces, denominada O (N ^ 2).

En una lista de 10 elementos no es gran cosa, pero en 10,000,000 de elementos no es razonable.

Merge Sort es un algoritmo más complejo. No es tan obvio, pero los beneficios se vuelven claros muy rápidamente.

La ordenación por fusión es un algoritmo recursivo. Divide la lista por la mitad y ejecuta merge-sort en cada mitad. Al repetir este proceso de división, finalmente tiene listas de tamaño 1, que obviamente ya están ordenadas, ¡fácil!

Luego, una vez que ambas sublistas están ordenadas, combina el resultado. Debido a que sabe que ambas listas están en orden, solo necesita pasar por encima de cada sublista una vez para hacerlo; nunca necesita profundizar para buscar valores fuera de orden

El tiempo de ejecución absoluto en el peor de los casos de este algoritmo es O (N log N). En una lista grande, esto es mucho más rápido.

¿Pero qué hay de la RAM?

Aquí es donde creo que la importancia es realmente llevada a casa.

La clasificación de burbujas se puede hacer fácilmente en el lugar usando solo una variable para mantener los valores mientras cambias sus posiciones. La pila de métodos del software también es muy razonable: puede implementar esto como un bucle muy simple.

El tipo de fusión es un poco más complejo. Las implementaciones más comunes usan múltiples matrices más pequeñas para reorganizar los datos, lo que requiere memoria 2N. Además, debido a que es un método recursivo, la pila de tiempo de ejecución se usa mucho más.

Entonces, ¿cuál usas?

Dígame usted.

Si tiene una lista de 10,000,000 de elementos, con mucha RAM disponible, ¿cuál seleccionaría? Combinar tipo, naturalmente.

Si tiene una lista de 1,000 elementos, pero tiene RAM extremadamente limitada, ¿cuál seleccionaría? Tipo de burbuja, a pesar de lo “malo” que sea.

Debido a que analizamos cómo se comporta cada uno de los algoritmos, podemos tomar una decisión inteligente en función de nuestras necesidades.

( Nota: en realidad hay otros algoritmos de ordenamiento que son una mejor opción que el ordenamiento por burbujas en ese caso, pero este es un ejemplo simplificado )

Importante es una cosa subjetiva. Si el análisis de algoritmos es importante para usted, está bien. Si no es importante para ti, también está bien.

No existe porque es importante. Existe porque la gente había desarrollado algunos algoritmos y se preguntaban si estos algoritmos eran buenos. Si fueran mejores de lo que existía antes.

Ahora, si has hecho algo, puedes probarlo en la práctica, pero ¿cómo puedes estar seguro de que tus experimentos cubren todas las bases? ¿Qué pasa si el hardware cambia? ¿Cómo puede convencer a la gente de que su algoritmo seguirá funcionando mejor si todo se amplía por un factor de un millón?

Entonces, no estoy muy seguro de qué es tan sorprendente aquí, de verdad. La gente solo quiere saber si sus cosas son buenas, por lo que lo analizan.

Los algoritmos son los medios detrás de la implementación exitosa de las tareas informáticas; por lo tanto, el análisis más importante es garantizar que el algoritmo pueda realizar la tarea. Incluso entonces, simplemente realizar la tarea no es suficiente en todos los casos. Otro análisis que puede ser requerido podría involucrar sincronización del sistema y / o restricciones de sincronización; por lo tanto, será necesario un análisis para garantizar que el algoritmo funcione dentro de las restricciones, lo que incluye si el algoritmo puede modificarse para cumplir con las restricciones si el análisis original da como resultado que el algoritmo no modificado no cumpla con las restricciones.

Lo que me está empezando a preocupar es que hay una serie de personas que parecen no entender qué es un algoritmo y / o cuál es su propósito.

Un último punto importante en la ingeniería de software es que no existe una única forma correcta de realizar una tarea correctamente; Varias maneras, cada una con pros y contras. Es tarea del ingeniero en ingeniería de software determinar cuál es la mejor manera de cumplir con los requisitos del sistema, teniendo en cuenta que lo que es mejor puede no cumplir con ciertos estándares artificiales, como el enlace entre módulos, simplemente debido a las limitaciones de tiempo para cumplir con los requisitos de los enlaces.

El análisis de algoritmo continúa porque los datos cambian, con el tiempo, en las ubicaciones, en cualquier cosa notable. Las personas informáticas tienden a olvidar el proceso y los datos se entrelazan entre sí. Un algoritmo de clasificación podría ser excelente en un conjunto de datos y un fallo en el resto. Se investiga el algoritmo para asegurarse de que siempre coincidan.

El análisis del algoritmo es importante porque da una idea de cómo un algoritmo escala con el aumento del tamaño del sistema y ofrece una comparación de diferentes algoritmos. Por ejemplo, podemos decir que el algoritmo O (N) es mejor que O (N ^ 2) porque el primero será mejor en un conjunto de datos grande en comparación con el posterior.

La mayoría de las veces, ignoramos la constante frente a la complejidad. Pero a veces, se vuelve muy importante. Por ejemplo, O (10000000 N) no es tan bueno como O (1 N ^ 2). En tales casos, las constantes también se vuelven importantes.

More Interesting

Soy un programador promedio, me encanta codificar en Java y estoy tratando de mejorar mis habilidades de codificación algorítmica. ¿Cómo puedo mejorarlos?

¿Cuál es la mejor manera de analizar un currículum en los campos de la base de datos? ¿Qué hacer si tiene muchos currículums y necesita que los datos se extraigan en elementos individuales que se pueden colocar en una base de datos?

¿Se ha completado Javascript Turing?

Matemáticas generales que uno debe saber antes de tomar la clase de algoritmo? Especialmente para estudiantes con antecedentes no informáticos.

Crear un algoritmo simple me lleva horas, ¿cómo puedo ser más rápido?

¿Qué libro sería mejor para aprender la estructura de datos para principiantes?

¿Qué tan bueno es quicksort y cadenas?

¿Realmente utilizas los algoritmos informáticos que aprendes en la universidad cuando consigues un trabajo? En caso afirmativo, ¿cuál es el mejor trabajo que puede permitirse en algoritmos?

¿Qué son las estructuras de datos y los algoritmos en c ++?

¿Cuáles son algunas de las lagunas en el algoritmo de reserva de entradas de irctc?

¿Cuáles son algunas de las preguntas de cadena que se hacen comúnmente en una entrevista técnica?

Cómo probar la corrección del problema de cambio de moneda usando DP y poda

¿Cuáles son algunos algoritmos geniales que se pueden usar para el reconocimiento de objetos y cómo los usamos?

¿Dónde puedo encontrar un entrenador de programación personal que me enseñe programación y algoritmos?

¿Cuáles son algunos libros excelentes sobre la programación de algoritmos ARM?