¿Qué tan difícil es aprender por sí mismo cómo codificar algoritmos eficientes?

¿Te refieres a codificar un algoritmo eficiente que ya tienes o crear un nuevo algoritmo eficiente?

Hay muchas bibliotecas de algoritmos disponibles para muchos lenguajes de codificación; ¿Por qué escribir otro?

De todos modos, la codificación de un algoritmo dado (eficiente o no) es bastante fácil, aunque descubrir cómo desacoplar sus datos puede ser ‘interesante’, permitir (1) la reutilización del código y (2) otro algoritmo para reemplazarlo más tarde.

En cuanto a crear un nuevo algoritmo, CUIDADO. Una vez me dieron una prueba de codificación, para contar lo más rápido posible el número de bits en un flujo de datos (sí, se imprimió en negrita cuando me lo enviaron por correo electrónico). Se me ocurrió un nuevo algoritmo (bueno, uno que no había encontrado antes) que sería un orden de magnitud más rápido que cualquier cosa que hubiera visto. No recibí respuesta, así que lo llamé para ver si aceptaba que mi código era el más rápido que había visto. “No lo sé; No lo ejecuté “.” ¿Por qué no? “” Porque no lo entendí “.

Depende de sus antecedentes y recursos. Una vez que tenga una base en cosas técnicas, no es mucho más difícil aprender más en esas áreas. Si tu fondo es fuerte, será más fácil. Si es débil, es posible que deba comenzar más atrás (conceptos básicos) y avanzar. No será más difícil , solo tomará más tiempo .

Estoy pasando por algunas cosas de algoritmos ahora (CLRS). Había usado este libro durante la licenciatura, y hay muchas cosas que no recuerdo, o recuerdo que eran densas que ahora no parecen tan malas. Mi progreso no es muy rápido, pero no estoy bajo la presión de tener que hacer tareas y aprender esto para una calificación tampoco. Entonces, simplemente no esperaría que las cosas sucedan durante la noche.

Debe adoptar un enfoque práctico e intentar mirar algunas herramientas en línea, libros, MIT OCW y otras cosas que tratarán de educarlo sobre la optimización de algoritmos específicos y la práctica de problemas.

No es muy difícil en absoluto: la codificación es la parte más difícil con diferencia.

Eficiente generalmente significa O (n log n) como el peor de los casos. Lo que significa dividir y conquistar.

Las estructuras de datos son mucho más interesantes, ya que tienen algoritmos potencialmente múltiples que se ejecutan en ellas. Tienen compensaciones que deben hacerse en términos de tiempo y espacio.

Por supuesto, si desea que un solo algoritmo se ejecute de forma tan paralela como, por ejemplo, la búsqueda de Google, ese es un asunto diferente, para múltiples doctorados y más.