En el pasado, pensé que los algoritmos eficientes para CS, cuando existen, pueden encontrarse problemas siguiendo una estrategia conocida como dividir y conquistar, recursividad, programación dinámica, etc.
Esto definitivamente no es cierto. En la escuela y a través de la experiencia, recogemos una bolsa de trucos, pero no hay razón para esperar que funcione ningún truco en particular, excepto la intuición y el contexto. Es como hacer una prueba en matemáticas, o integración simbólica en cálculo: aprendemos integración por partes e identidades trigonométricas, y esperamos que les sea útil. Siempre trabajan en la prueba, por supuesto, pero en el mundo real la mayoría de las integrales no se pueden hacer en forma cerrada, mientras que otras solo son posibles a través de trucos especiales que no aprendimos en la escuela.
Entonces, como punto de partida, los algoritmos son difíciles. Algunos de los que todos conocemos y amamos fueron descubrimientos importantes en ese momento, publicados en revistas académicas en los años 60, 70 y 80.
Los algoritmos a menudo son impulsados por metáforas o correspondencias. Por ejemplo, en el ejemplo de la lista vinculada, puede imaginarse corredores en una pista, donde el más rápido eventualmente debe alcanzar y “dar vuelta” al más lento. También puede dibujar una correspondencia entre los elementos de la lista y los enteros. Por ejemplo, suponga que la lista va para X elementos y luego tiene un ciclo de longitud Y. Los punteros en el tiempo N están representados por N y 2N, por lo que en algún momento estarán separados por Y, por ejemplo en N = Y, y apuntarán al mismo nodo, a menos que aún no hayamos llegado al ciclo (porque X podría ser grande). Bueno, en ese caso siempre hay N = 2Y, y N = 3Y … eventualmente N será un múltiplo de Y mayor que X, y también lo será 2N. Estas dos metáforas (para corredores y enteros) representan intuiciones diferentes que apuntan a la misma solución creativa al problema.
- Estoy pensando en seguir mi maestría (MS) en tecnología musical. ¿Cuál es el alcance después de eso?
- ¿Qué piensas sobre esto? siga el enlace de LinkedIn Gaming Vs Civil Engineering
- ¿Cuáles son algunas historias interesantes que involucran el pensamiento lateral?
- ¿Cuáles son las alegorías útiles sobre la perspectiva o la resolución de problemas?
- ¿Cuáles son algunos ejemplos de cómo las personas han aprovechado el mapeo mental?
De hecho, también hay muchas otras soluciones (consulte Encontrar un bucle en una lista vinculada individualmente), aunque ninguna tan linda. Este problema tiende a surgir particularmente porque tiene esta solución simple y sorprendente. Por lo tanto, es un tipo diferente de “artificial” que los problemas del aula: se selecciona por tener una solución simple e inusual, en lugar de una solución simple y “habitual”.
Sin embargo, para responder a su pregunta real, se trata de desarrollar su caja de herramientas y su intuición. Se trata de la coincidencia de patrones: detectar que hay una estructura recursiva o una estructura de programación dinámica, o que una tabla hash o un árbol binario podrían ayudar. Cuando aborde problemas del mundo real, comience por reducir el problema a su esencia y luego busque las soluciones de otras personas. Por lo general, alguien ha necesitado resolver un problema similar bajo restricciones similares. Para problemas complicados de algoritmos (encontrados principalmente en entrevistas de ingeniería de Silicon Valley), solo practique, practique, practique.