¿Qué debo hacer para fortalecer mis habilidades de resolución de problemas en la programación?

Para resolver un problema primero, debe comprender el problema con variables menos desconocidas. Si no puede entender el problema, no puede resolverlo. Nunca asumas ningún aspecto mientras escribes un programa porque una máquina no puede asumir nada. Una vez que comprenda el problema, puede trabajar en el desarrollo de la arquitectura de la solución.

Analiza estos puntos.
1. ¿Qué tienes en la mano (entrada, conocimiento)
2. Evaluar todas las variables asociadas con un problema (condiciones, etc.)
3. Lo que necesitas para resolverlo. (se desconoce cuál se debe identificar, podría ser conocimiento, variables adicionales asociadas con el problema)

Los problemas de práctica de programación tienen todo lo que necesitas. es solo que podrías estar pasando por alto algunos puntos.

Finalmente, debes ser paciente para ser un programador. Lucha con un problema hasta que se resuelva. Resuélvelo con el enfoque más flojo, luego mejora. Nunca te rindas ante un problema. Una vez que pruebes la victoria después de mucha lucha, el apuro, la felicidad, el subidón alentarán al programador que llevas dentro a querer más. Entiendo que la programación puede ser un poco frustrante, sin embargo, siempre tenga en cuenta que usted es el que tiene cerebro, usted es el maestro, una máquina es tonta. No tiene autoridad sobre ti, ni siquiera para frustrarte.

Sea perezoso para hacer trabajo repetitivo, resuelva el trabajo repetitivo con la programación. Resuelva un problema con múltiples soluciones, por ejemplo 2 + 2 = 4, entonces es – 2938 + 2942 = 4.

A2A.

Desarrollar cualquier tipo de habilidad para resolver problemas requiere una buena cantidad de práctica y tiempo, y lo más importante, de la manera correcta. Aquí hay un posible enfoque:

1) Fase de aprendizaje: cuando vea un nuevo problema, dedique un tiempo a comprender y visualizar el escenario. Luego, verifique todos los enfoques que se pueden usar para resolver el problema: codicioso, programación dinámica, divide y vencerás, etc. No mire las soluciones hasta que haya agotado todas sus ideas, siga intentándolo. Para cada enfoque, vea cómo se escala. La mayoría de estos no podrán resolver el problema en general, o no escalarán bien. Dependiendo de sus soluciones, es posible que desee codificar algunos enfoques que se le ocurran.

Si no puede encontrar una solución, revise la solución provista. Analízalo cuidadosamente. Vea por qué funciona, cómo se escala, etc. Después de estudiarlo, intente reproducirlo usted mismo. Puede ser codificarlo. Además, dedique un tiempo para descubrir cómo es esto diferente de los enfoques que estaba intentando. ¿Qué información adicional utiliza esta solución para obtener la respuesta, que no estaba utilizando? Esto lo ayudará a aplicar esta solución a un problema similar en el futuro.

2) Fase de fortalecimiento: a menudo, es importante recordar las técnicas que se encuentran durante la fase de aprendizaje. Durante la fase de aprendizaje, debe marcar los problemas que desearía revisar más adelante. Luego, una vez que haya probado suficientes problemas en la fase de aprendizaje, vuelva a estos problemas marcados y vuelva a intentarlos. Si puede encontrar la solución rápidamente, desmarque. Repita esto varias veces hasta que haya dominado la mayoría de estos problemas, dando suficientes espacios intermedios para permitirle olvidar las soluciones exactas.

3) Fase de finalización: Algún tiempo después de haber completado la fase de fortalecimiento, revise los problemas una vez más. Lea cada problema e intente recuperar la solución en aproximadamente 30 segundos. No use papel, solo trate de recordar las ideas clave. Si hay problemas para los que no puede recuperar la solución, márquelos, verifique las soluciones y repita esta fase para problemas marcados después de un tiempo.

Una vez que complete esta fase para un conjunto de problemas, elija un nuevo conjunto de problemas y repita. Gradualmente podrá ver una mejora en sus habilidades para resolver problemas.

(Fuente: respuesta de Prashant Sharma a Sugerencias sobre cómo obtener un rango por debajo de 1000 en JEE)

Hola a todos,

Veamos cómo uno puede mejorar sus habilidades para resolver problemas.

Aprenda habilidades y técnicas creativas para resolver problemas. También una discusión sobre el proceso y la teoría detrás de la resolución de problemas de gran alcance y el pensamiento creativo.

Cuando comienzas a mirar un problema y parece realmente simple, realmente no entiendes la complejidad del problema. Luego entras en el problema, y ​​ves que es realmente complicado, y se te ocurren todas estas soluciones intrincadas. Ese es el medio, y ahí es donde la mayoría de la gente se detiene …

Pero la persona realmente excelente continuará y buscará la clave, el principio subyacente del problema, y ​​propondrá una solución elegante y realmente hermosa que funcione.

Cuando está resolviendo problemas, está haciendo una de dos cosas. O estás arreglando algo que está roto o estás construyendo algo. Si está construyendo algo, podría ser algo completamente nuevo, o podría ser algo mejorado. Siga leyendo para descubrir cómo hacer esto de manera efectiva.

Algunas personas son naturalmente buenas para resolver problemas. Otros no lo son (todavía). La mayoría están en algún punto intermedio. Mucha gente subestima cuán buenos son para resolver problemas. Muchos no se dan cuenta de cuánto resuelven realmente los problemas. Los problemas nos rodean y los resolvemos todo el tiempo, ya sea algo tan simple como decidir si poner esa manta extra en la cama esta noche, o algo un poco más difícil como construir un avión con basura vieja que has encontrado en el garaje.

Donde quiera que esté, puede mejorar sus habilidades para resolver problemas. Con la mentalidad correcta, la resolución de problemas no es tan difícil y es bastante divertido. Arreglar cosas y construir cosas siempre es una tarea gratificante. Cuanto más resuelva su problema, mejor será también.

Pasos para convertirse en un buen solucionador de problemas:

  1. La actitud correcta
  2. Se de mente abierta
  3. Ser curioso
  4. Haga las preguntas correctas
  5. Asegúrese de resolver el problema correcto
  6. Evaluar la situación
  7. Crear una hipótesis
  8. Pon a prueba tu hipótesis
  9. Enjuague y repita

Así que este es el proceso desde el cual puede ser un mejor solucionador de problemas.

“A veces, el problema que ves inicialmente no es el problema en absoluto. Es un síntoma del problema real. Si resuelve el síntoma, no está resolviendo el problema real, simplemente le está poniendo una curita ”. ——— Steve Jobs

Espero que esto te pueda ayudar.

Gracias.

La resolución de problemas es la raíz de la programación.
Programamos para resolver problemas.

Supongo que los pasos que sigo son los siguientes:

  1. Analiza el problema.
    ¿Cuál es el problema real? Desglose los pasos que tomaría para resolver el problema sin el programa. Pueden ser cien pasos. Podría ser fuerza bruta. No te preocupes por la elegancia todavía.
  2. Plan.
    Descubre cómo puedes hacer que tu programa haga lo que acabas de analizar
  3. Diseño.
    Diseñe su programa como un diagrama, UML y / o en pseudocódigo.
  4. Rellenar los espacios en blanco.
    Escribe el código real.
  5. Prueba.
    ¿Funciona? Por qué no? Si no, regrese al paso 1, esta vez con su código.
  6. Refactorizador
    Mire su código y vea cómo puede recortarlo, hacerlo más simple o más elegante. También puede ayudar si comprende alguna función matemática que podría usarse para simplificar el proceso en lugar de golpearlo con un martillo.

Espero que las personas con más experiencia que yo puedan responder a su pregunta. Esto es lo que suelo hacer:

Establezca metas para cada semana Puede comenzar resolviendo 2 o 3 problemas cada semana dependiendo de sus limitaciones de tiempo. Comience resolviendo los fáciles que se enumeran en los sitios web más populares (topcodder, hackerrank, etc.).

Participe en concursos de programación Hay muchos de ellos cada año tanto en línea como en el sitio. No importa si terminas último o no ganas nada, solo hazlo. Mejorará gradualmente y obtendrá más confianza.

Aprenda sobre las estructuras de datos Necesita saber cómo funcionan las estructuras de datos y cómo implementarlas por tí mismo. ¿Por qué? Simplemente porque los necesita para resolver problemas de manera eficiente y son el núcleo de cada software de computadora. Algunas estructuras de datos imprescindibles son:

Arrays / Arraylists
-Hash tables
-Muchísimo
-Pilas y colas
-Trenza
-Gráficos
-Vectores

Los algoritmos de búsqueda y ordenamiento de algoritmos son especialmente útiles. Asegúrese de saber cómo implementar:
-Ordenación rápida
-Merge tipo
-Tipo de inserción
-Búsqueda binaria
-Breadth-first search
-Profunda-primera búsqueda

Practica, practica, practica No hay nada mejor que ensuciarte las manos y comenzar a programar, aprenderás mucho en el camino

Fui entrenador de nuestro equipo durante varios años. Necesitas hacer un par de cosas.

1. Todos los problemas del concurso de programación ACM están en línea en https://icpc.baylor.edu/worldfin … Trabaja con todos 🙂

2. Hay dos piezas para resolver problemas computacionales: estructura de datos y algoritmo.

  • Algunos problemas te golpearon en la cabeza con la estructura de datos primero; Algún algoritmo primero.
  • Prácticamente todas las estructuras de datos son algún tipo de gráfico, pero pueden ser más felices como matrices, punteros o cadenas de bits … Aprende a escuchar lo que te dice el problema.
  • Los algoritmos son secuencias de bloques cortos de código para implementar (en una estructura de datos) transformaciones de información. Descomponer, descomponer, descomponer.

3. Los principiantes nunca piensan en las pruebas; Los expertos se obsesionan con las pruebas. “Si no puedes probarlo, no lo entiendes”. Comience aquí Desarrollo basado en pruebas

“La práctica hace la perfección”.

La mejor manera de ser bueno en la resolución de problemas es resolverlos y desafiarse con diferentes problemas. Una vez que haya dominado los problemas “fáciles”, ¡no siga haciéndolos! Pase a los desafíos que son un poco más difíciles.

Algunos excelentes lugares para encontrar problemas son:
Juez en línea de UVa
Sobre nosotros – Proyecto Euler

¡Ambos tienen problemas que varían en dificultad y son geniales para jugar! ¡Lo importante para recordar es que la programación es divertida!

Estudia matemáticas.

Para fortalecer sus habilidades de resolución de problemas, necesita ser bueno en matemáticas y tener una buena capacidad lógica y de razonamiento.

La mayoría de las veces, una vez que tiene una comprensión adecuada del enunciado del problema, todo se reduce a las matemáticas. Entonces, cuanto mejor seas con las matemáticas, antes llegarás a la solución.

Hay dos formas de construir intuiciones fuertes para la resolución de problemas. Lo primero es leer. Puede comenzar con la teoría de números, la combinatoria, la probabilidad y la geometría computacional, por nombrar algunos. Poco a poco, cuando te encuentres con problemas difíciles, tendrás que leer muchos algoritmos nuevos.

La otra forma es practicar hasta que haya cubierto la mayoría de las situaciones que pueda encontrar. Ciertamente no puedes cubrir todo.

Sal con programadores que sean más inteligentes que tú.

Puede ser en un laboratorio universitario, trabajo, conferencias … pero probablemente no en línea. Finalmente, la conversación se centrará en lo que la gente está trabajando y usted puede descartar su problema actual interesante. Probablemente obtendrá varias soluciones que no se le habían ocurrido.

Nunca he visto un foro en línea que pueda duplicar lo que un programador más hábil puede hacer en el reverso de una servilleta después de un par de cervezas. Sal y habla con la gente. Funciona.

Realmente, la única respuesta es “práctica”. Elige problemas. Intenta resolverlos. Problemas reales, quiero decir, no juguetes con respuestas específicas.

Más allá de eso, todos son diferentes. A algunas personas les va bien mirando las soluciones de otras personas. Otros necesitan trabajar hasta que estén seguros de estar atascados. Otros necesitan construir lentamente.

Pero si no estás probando cosas nuevas, será difícil.

Creo que hay tres formas de acceder a él.
Primero necesitas estudiar matemáticas discretas. Te dice cómo abstraer los problemas reales en problemas matemáticos.
A continuación, debe practicar más. La ‘práctica’ significa hacer más ejercicios y pensar la razón por la que no puede hacerlo. Recuerde, cuanto más piense y resuma, mejor será. Lo que es más, debe ser pacífico, no lo haga.
ser torpe, puede hacerte aprender con menos eficacia.
Por último, pero no menos importante, debe aprender la Estructura de datos básica y el Algoritmo. Le enseña cómo se organizan los datos en la computadora.

Intente aprender la estructura básica de datos y aplíquelos en problemas tratando de resolverlos. Hay muchos problemas disponibles en Geekforgeeks, Codenation, Codechef, etc., que podrían ayudarlo a mejorar sus técnicas de resolución de problemas. Los problemas se resuelven de una forma u otra, pero con la ayuda de la estructura de datos, podrá identificar una solución improvisada y eficiente para el problema. De eso se trata la buena programación.

Mejore los conceptos básicos y fundamentales de la programación. Si desea mejorar el lenguaje C, primero mejore las habilidades en sus comandos (como “for”, “do”, etc.) y descubra que la limitación de cada comando hace la diferencia entre los comandos. Resuelva la aptitud con el algoritmo (con lógica de programación).
Resuelva el ejercicio de cualquier libro de programación con un enfoque diferente.

¡Tira los libros y el código!

Piensa en el problema de forma intuitiva. Si no puede llegar a un ejemplo de la vida real, entonces fuerce. Una vez que tenga un ejemplo de la vida real, busque una solución conceptual antes de descifrar el código o las matemáticas.

La teoría y las herramientas se implementan para atender problemas prácticos.

Vea la respuesta de Marcas Neal a ¿Cómo resuelven los programadores experimentados y avanzados problemas que no saben cómo comenzar?

La mejor manera de mejorar sus habilidades para resolver problemas es resolver problemas, muchos problemas. Ah, y por cierto cometerás muchos errores, esto es normal y sirve para ser una gran oportunidad de aprendizaje. Un día una persona me preguntó: “Eric, ¿cómo sabes tanto sobre computadoras?” Y respondí: “Porque puedo cometer errores tres veces más rápido que el humano normal”. 🙂

El primer paso y el más básico es asegurarse de comprender el problema. Míralo desde múltiples ángulos (piénsalo de diferentes maneras).

En segundo lugar, cuando un problema parece demasiado grande, busca una esquina débil que sepas arreglar, luego busca otra pequeña pieza que sepas arreglar hasta que no quede nada que necesite reparación.

Es “Practicar e implementar”.
Hay muchos sitios web de programación competitivos, puede elegir sus problemas desde allí y practicar y luego participar en los concursos que le dirán cómo destaca entre la multitud.

Puedo decirte cómo aprendí (hace años):

Ayuda a un GRAN número de personas con sus problemas. Trabaja con alguien más con más experiencia que tú para ayudarte a rescatarte cuando te sobrepases.

Esto cumple dos funciones:

  • Te enseña a aprender a buscar problemas comunes rápidamente
  • Mejora tus habilidades de comunicación (siempre que la gente no te abandone con disgusto).

No estoy seguro de que sea una forma particularmente eficiente, pero me pagaron por hacerlo (hace mucho tiempo).

No creo que haya alguna regla básica para mejorar sus habilidades de resolución de problemas para la programación. Intenta contribuir al código abierto tanto como puedas. Hay muchos sitios web que albergan problemas y puede intentar resolverlos como HackerRank, TopCoders, etc.

Practique problemas en varios sitios de programación competitivos y si no puede resolverlos, vea las diversas soluciones a ese problema e intente pensar cómo esa persona había imaginado esta solución.

– elija lápiz y papel y ejecute algunos ejemplos sobre cómo lo resolvería manualmente

– puede ser un problema diferente primero

– puede ser una solución aproximada primero

– puede ser un algoritmo incorrecto primero (codicioso generalmente es incorrecto)

– prueba el proyecto euler y el campo de código libre

– hacer cursos en línea; Hice grandes progresos solo haciendo una docena de ellos