¿Debería un principiante construir cosas y contribuir a proyectos de código abierto antes de aprender algoritmos?

Durante uno de mis proyectos, tenía una parte del código C ++ que tardaba un par de minutos en ejecutarse en un gran conjunto de datos, y necesitaba acelerarlo. Al perfilar el código, entendí que se debe a colisiones en el STL unordered_map . Al experimentar con varios algoritmos de hash , me encontré con uno que acelera el código a un par de segundos.

¿Necesitaba saber el algoritmo de hash? Definitivamente no, ya que siempre puedo buscarlo. ¿Pero necesitaba saber que existen tales algoritmos? Tendré que decir que . No necesita conocer todos los algoritmos o cómo funcionan todos. Pero un buen punto de partida será saber que tales algoritmos existen.

En C ++, cuando necesite buscar en un std::set , ¿utilizará el método find en (que se ejecuta en tiempo O(n) ) o el método find incorporado (que se ejecuta en tiempo O(log n) ) en el set? Eso es lo que deberías saber.

Utilizará algoritmos constantemente en la programación del mundo real, pero no es como se espera que sepa para las entrevistas.

Las entrevistas parecen tratarse de probar si conoces algoritmos bien conocidos, lo cual no se parece en nada a la programación real.

En la programación real, la clasificación de listas es un problema resuelto el 99.999% de las veces, ya no necesita escribir su propio QuickSort como necesita escribir su propio controlador USB.

En la programación real, se nos permite buscar cosas en Google.

Si quieres ser un programador, necesitas hacer programas, y eso significa construir cosas. Elija un idioma, elija un proyecto y escríbalo.

Los algoritmos son parte de cualquier grado de CS respetable, por lo que no pierde el tiempo reinventando la rueda y sabe que ya hay una solución a su problema.

No los implementará, utilizará la implementación de otra persona el 99% del tiempo. Pero si no sabe que hay una solución a su problema, no puede buscarlo y usarlo. En cierto modo, estudias algoritmos para no tener que escribir algoritmos ms

Sin embargo, no “vienen primero”.

En serio, sin embargo, intenta hacer un pequeño proyecto. No tiene que ser un proyecto de código abierto, solo algo que haga algo útil y no demasiado difícil, pero tampoco es una trivia. Es la mejor manera de comenzar.

No sé cómo implementar ninguno de esos “algoritmos de entrevista” y nunca tuve que hacerlo en el mundo real. La cuestión es que busco en Google una solución más rápido que la mayoría de las personas que me rodean. Creo que esto es mucho más valioso que conocer las implementaciones de algoritmos de memoria.

More Interesting

Quiero aprender la estructura de datos y Java, ¿cuál debería aprender primero?

Cómo explicar el algoritmo de clasificación de inserción a un niño de 10 años

¿Cuándo es conveniente resolver un problema usando un algoritmo codicioso?

¿Alguien podría dar una explicación detallada del algoritmo de Lee para encontrar contornos cercanos en una región?

¿Qué debe aprender primero, algoritmos y DS o un lenguaje de programación?

¿Qué algoritmos de minería de datos puedo usar para maximizar las ganancias de una compañía de tarjetas de regalo que almacena ventas, pedidos y datos de clientes en una base de datos relacional?

¿Existe un libro o sitio web que describa los problemas y luego le solicite la estructura de datos / algoritmos más apropiados necesarios para resolver el problema?

¿Cuál es el significado del peor tiempo de ejecución de un algoritmo?

Cómo escribir un programa en C para implementar un algoritmo de planificación de prioridades, junto con la visualización del diagrama de Gantt

Cómo explicar la complejidad algorítmica a la abuela en términos simples

¿Algún consejo para estudiar la complejidad del espacio para programar entrevistas? ¿Cuáles son algunos buenos recursos para aprender sobre la complejidad del espacio?

¿Cuáles son algunos de los mejores algoritmos?

¿Es probable que algún día los algoritmos de aprendizaje automático evolucionen para resolver problemas completos de NP?

¿Cómo atravesar una matriz desde una posición dada vertical u horizontal o diagonalmente para encontrar un elemento en C ++? ¿Podría proporcionar un código de muestra?

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