Soy un estudiante de primer año de CS, no puedo resolver programas simples, ¿cómo puedo realmente mejorar mis habilidades algorítmicas de resolución de problemas?

Como algunas respuestas a esta pregunta ya describen, las plataformas de programación de concursos lo ayudarán en eso (como HackerRank, CodeForces, TopCoder, etc.). Pero le aconsejaría que explore el ProjectEuler por razones personales. Todavía estoy fascinado a través de los años sobre las capacidades de capacitación y la maravillosa curva de aprendizaje del pensamiento computacional / matemático a través de la resolución de problemas de ProjectEuler.

Yo y algunos amigos tenemos muchas soluciones alojadas en GitHub: DestructHub / ProjectEuler.

Leyenda: número de soluciones en el repositorio escritas en cada idioma.

Mi consejo es: seleccione un idioma primario que se sienta bien codificando con él (C, C ++, Java, Python, lo que cree que es mejor para usted). Oblíguese hasta el límite para obtener una respuesta razonable (complejidad de tiempo) y desbloquee el hilo de respuestas de ProjectEuler. Esta es una parte difícil ya que a veces tenemos el mal hábito de buscar pistas y lo que sea. Esto no está bien. Pierdes mucho proceso de pensamiento haciendo eso. No hagas eso .

Después de resolver, vea mejores formas de resolver ese problema: verá muchas formas diferentes después de abrir el hilo de un problema específico, ¡incluso las personas que resuelven a mano a través de las matemáticas puras o el ensamblaje X86! Entonces, intente modificar su versión a través de las ideas recopiladas, ajustándola pero también entendiéndola.

Si parece que se requieren algunos conocimientos básicos, algoritmos o matemáticas, busque sobre ellos para comprender completamente la solución del problema. Investigo mucho después de un problema resuelto. Sinceramente, después de años con ProjectEuler, mis habilidades para resolver problemas no son las mismas. Se me ha dado un excelente impacto en mi forma de pensar y ahora puedo resolver problemas más rápido que antes.

Por lo tanto, recomiendo encarecidamente ProjectEuler para crear mejores habilidades para resolver problemas, como programación dinámica (optimización), pensamiento matemático, complejidad computacional, estructuras de datos y muchos otros temas que la respuesta de Quora es restringir a lo que contiene.

ProjectEuler es la forma matemática / comp para divertirse resolviendo problemas 🙂

Hay un par de formas de practicar lo que llamamos “mentalidad de programación”

La primera y posiblemente la habilidad más importante para poseer es poder ver un gran problema y dividirlo en docenas o incluso cientos de pequeños problemas.

Por supuesto, esto se puede aprender escribiendo mucho, y me refiero a MUCHO código. trabaje en diferentes proyectos, obtenga ideas y aportes de otros y simplemente continúe construyendo cosas interesantes.

Pero hace un par de semanas, uno de mis mentores me enseñó un pequeño truco que ayudará mucho a conectar su cerebro para que siempre vea los problemas y las acciones en piezas pequeñas.

Ahora esto es lo que me dijo que hiciera:

  • Ve a sentarte en algún lugar en un lugar público. Una biblioteca, el parque, una cafetería o incluso en casa.
  • Agarra un poco de lápiz y papel.
  • Elija un sujeto y obsérvelo durante los próximos 20 a 30 segundos.
  • anote cada acción que tomen. Digamos que estás en una cafetería y el servidor acaba de tomar un pedido.
  • pregunta qué quiere el cliente
  • escribe la orden
  • limpia la mesa
  • camina de regreso al bar para hacer la bebida.
  • Ahora tome cada una de estas acciones y piense en cada acción que tuvieron que tomar para lograr eso. Te ayudaré a resolver la redacción de la orden.
    • Mueve la mano derecha al bolsillo
    • Cerrar la mano derecha alrededor de la pluma
    • sacar la mano derecha del bolsillo
    • mover la mano izquierda al bolsillo
    • cerrar la mano izquierda alrededor del bloc de notas
    • mover la mano izquierda fuera del bolsillo
    • llevar la mano con el cuaderno hacia adelante
    • mover la mano con la pluma al papel
    • poner bolígrafo sobre papel
    • mueva la pluma en formas sobre el papel para formar palabras
    • etc.

    Entiendes el punto 😉

    Ahora, esto es exactamente lo que estaría haciendo al determinar cómo escribir su código.

    Comience con un problema “grande” y luego intente cortarlo en tantos pedazos como sea posible.

    ¡Espero que esto ayude!

    Para obtener el dominio de las habilidades algorítmicas, le recomendaré que aprenda diagramas de flujo. Practique varios problemas como el cálculo factorial, el número de Armstrong o el cálculo de números de palíndromo y obtenga una vista detallada del algoritmo.

    Manténgase alejado de las palabras de moda. Muchas personas aquí preguntan sobre algoritmos cuando ni siquiera han descifrado un libro o tomado una clase.

    Solo trabaje en lo básico, apréndalos bien y practique / estudie.

    Para resolver cualquier / todos / problemas grandes, divídalos en piezas muy pequeñas, complete cada pieza y júntelas.

    En primer lugar, eres un estudiante de primer año, por lo que no es sorprendente que encuentres el material difícil. Eso es de esperarse.

    La forma de mejorar es practicar. Sé que es frustrante practicar cuando sientes que no estás llegando a ningún lado, pero eso es más o menos lo que tienes que hacer. Se hace más fácil con el tiempo.

    Aprender haciendo. Muchos problemas de programación. Te llevará 10 años convertirte en un excelente desarrollador de software, así que sé paciente y sigue haciendo lo mejor.

    Puedes aprender algoritmos básicos viendo videos de YouTube que explican el algoritmo y luego intenta codificarlos. Como estudiante de primer año, está por delante del juego si ya está aprendiendo algoritmos de clasificación y de árbol y gráfico.

    Encontraría un problema en su libro de texto que sabe cómo resolver y luego se desafía a sí mismo modificando un poco el problema y viendo si puede encontrar la manera de resolverlo. ¿Puedes hacer un ciclo que cuente de 1 a 10? Ahora haz que cuente del 1 al 20. Ahora haz que te pregunte qué contar primero. Ahora haz que elija un número aleatorio para contar. Ahora haz que cuente en 2 ‘s. Luego, hacia atrás … Si no es donde tienes problemas para encontrar otra cosa y ver cómo puedes desafiarte a ti mismo.

    intenta escribir en inglés simple lo que quieres hacer y refinarlo iterativamente y eventualmente todo lo que tienes que hacer es enchufar el código