¿Cuáles son los principios fundamentales de los algoritmos en la programación de computadoras?

El proceso de diseño de algoritmos es algo similar al método científico. Intenta comprobar el diseño de un algoritmo (hipótesis) para verificar su validez (prueba), medir su rendimiento (observaciones) e iterar para mejorar.

Vale la pena conocer el límite inferior del mejor rendimiento que puede obtener. Es por eso que la complejidad algorítmica (O (n) vs O (nlogn)) del problema es útil para estimar.

El primer paso es la especificación del problema, el contexto es importante. Si está resolviendo un problema para un cohete o para Big Data tendrá diferentes restricciones. Conocer el contexto puede proporcionar límites para su entrada y hacer que el problema sea mucho más simple

Me gusta mucho un ejemplo del primer capítulo del libro Programming Pearls de Jon Bentley. Habla sobre cómo estaba ayudando a un amigo a ordenar un archivo de disco. Saber más sobre el problema redujo drásticamente la complejidad del problema y mejoró el rendimiento.

Otra es que la estructura de datos correcta a menudo es clave para el algoritmo óptimo. Por lo tanto, vale la pena saber más sobre las estructuras de datos.

Uno de los meta algoritmos más importantes para conocer es Recursion (informática). Muchos problemas pueden resolverse combinando soluciones a problemas más pequeños. En el caso del máximo divisor común, la recursividad en valores más pequeños es esencial para el algoritmo euclidiano.

No necesita memorizar los algoritmos, intente inferir el patrón. Hacer pruebas de hipótesis

¿Se puede reducir el problema a algoritmos bien conocidos? ¿Ayudaría una estructura de datos? ¿Se puede resolver el problema recursivamente? ¿Ordenar la entrada lo haría más fácil ?, etc.

Antes de poder desarrollar un algoritmo, primero debe analizar el problema; Necesitas entender el problema. Entonces puedes preguntarte:

  1. ¿Cuál es la condición de terminación del algoritmo?
  2. ¿Es correcto el algoritmo?
  3. Eventualmente puede analizar la complejidad (por ejemplo, análisis Big-O)

No hay principios fundamentales, excepto quizás “saber algo sobre el tema del algoritmo”.

¿Encontrar el máximo común divisor de 2 números enteros? ¿Sabes cómo hacerlo en papel (ya sabes, matemáticas básicas). Escribe los pasos. Traducir al código.

¿Estás tratando de construir un piloto automático? Entonces es mejor que sepas mucho sobre la dinámica de los aviones, la navegación y un montón de otros temas relacionados.

Y, cuando se trata del mundo real, la mayoría de las veces

  • Utiliza un comando de idioma o una biblioteca.
  • Busca un algoritmo en Knuth o CLRS. (Al igual que busca integrales en el manual de CRC)

Si realmente está desarrollando un algoritmo, está haciendo matemática o ingeniería en profundidad, eso es específico para el dominio y el problema en cuestión, y necesita saber algo sobre el campo.

¡Ah, eres un principiante, como yo! Los algoritmos son cosas que puedes memorizar, pero también son cosas que puedes crear.

Creo que la parte difícil no es el diagrama de flujo, sino identificar y resolver un problema. Primero pregúntese, ¿cuál es el mejor asesor común? ¿Qué es el MCD para 12 y 6? ¿Cómo llegaste allí? Ahora traduzca eso a pasos.

Diagrama de flujo en la programación podría ayudar. Tiendo a olvidar lo que significan todas las formas y símbolos, así que los busco constantemente.

More Interesting

¿Es 'Cracking the Coding Interview' una lectura obligatoria cuando se postula para ser un ingeniero front-end?

¿Es c * O (n) = O (n) verdadero?

¿Hay alguna diferencia en la asignación de memoria entre la estructura y la matriz multidimensional?

Cómo aprender los pesos de las características de un modelo mediante el aprendizaje automático

Una computadora pequeña tiene 4 marcos de página. Un proceso hace la siguiente lista de referencias de página; 1,2,3,4,1,5,2,3,1,2. ¿Cuántas fallas de página ocurren usando los siguientes algoritmos de reemplazo de página?

Cómo evitar que el algoritmo de google para 'quiso decir' afecte mi sitio

¿Cómo convertirse en un experto en ciencia de datos (aprendizaje automático) que tiene una idea básica de la programación C / C ++? ¿Cuáles son algunos cursos o libros disponibles gratis o baratos?

Cómo resolver este problema en la búsqueda binaria

Cómo encontrar la subcadena común más larga de tres o más cadenas usando una matriz de sufijos

Cómo ganar un producto CodeChef o Codeforces (pegatinas especiales)

¿Cómo funciona el algoritmo de Warnsdorff?

¿Cuál es una manera de ordenar una matriz en C por una entrada simple?

¿Cuál es el futuro de la música generada por computadora?

Cómo comenzar a crear un modelo / pronóstico de ventas con dos años y medio de datos de ventas anteriores

¿Debo postularme a trabajos de desarrollo web si puedo construir aplicaciones CRUD pero no asimilo la notación Big O y nunca he trabajado en un proyecto grupal?