Al hacer este proceso exacto, aprendí algoritmos cuando era niño. Bueno, déjenme contarles cómo desarrollé algunos algoritmos de clasificación.
Tengo un paquete de cartas. Separado una suite (creo que fue corazones). El orden en el que decidí que deberían colocarse fue A, 2,3,4,5,6,7,8,9,10, J, Q, K. Ahora me obligué a hacer el trabajo de ordenar un estado aleatorio, mientras intentaba anotar todo lo que hacía.
- ¿Cómo puedo calcular de manera eficiente el número de intercambios requeridos por los métodos de ordenación lenta como la ordenación por inserción y la ordenación por burbujas para ordenar una matriz determinada?
- ¿Por qué el valor de matriz no se incrementa cuando intento rotarlo?
- ¿Qué es el algoritmo TDIDT?
- ¿Son los métodos en algoritmos Java?
- ¿Cuáles son los buenos canales en YouTube para aprender algoritmos y estructuras de datos para la preparación de Google Code Jam o Facebook Hacker Cup?
Inicialmente observé que estaba recogiendo cartas al azar (las que estaban frente a mis ojos y en la posición incorrecta) y las colocaba en otro lugar. También estaba haciendo cosas como si tomara un cuatro, lo colocaría aproximadamente un tercio del camino, esto usa información sobre el rango de valores con los que un algoritmo de clasificación general podría no tener que comenzar. El orden en que elegí las cartas fue demasiado aleatorio para hacer un análisis. De esto concluí:
- Nuestros cerebros funcionan de manera muy diferente a una computadora. Los dos no tienen los mismos movimientos básicos, por lo que no es posible que los dos tengan los mismos algoritmos.
- Una forma de resolver el problema puede ser muy eficiente en uno, pero no en el otro.
- Al pensar en una forma en la que habríamos resuelto el problema, podríamos hacer algunas suposiciones, como la disponibilidad de cierta información o la capacidad de solución de una determinada subparte, lo que puede no ser cierto cuando la computadora lo hace.
Entonces, traté de identificar los procedimientos básicos que sabía cómo implementar en una computadora. Para este problema de clasificación, esto sería comparar dos números y mover una tarjeta (mis notas me ayudaron aquí, principalmente escribía sobre movimientos de cartas aquí, así que sabía que podría ser un paso básico). Una vez que me limite a hacer solo estos movimientos, cualquier método que desarrolle sabría cómo escribir un programa. Y después de algunas horas moviendo tarjetas de un lado a otro, se me ocurrieron dos algoritmos para hacer la clasificación, los que llamaríamos (ahora que he leído algunos libros de algoritmos) clasificación de inserción y clasificación binaria.
Años más tarde, cuando estaba aprendiendo programación paralela, me encontré con un problema similar. Lo que hubiera funcionado para un programa lineal no parece muy eficiente ahora. Tuve que volver a aprender que la programación paralela requiere un conjunto diferente de conceptos básicos para funcionar de manera eficiente.