Cómo desglosar un problema y resolverlo con el uso de la programación Java

Para empezar, la resolución de problemas con Java es un subconjunto de la resolución de problemas. Por lo tanto, enmarcaré mi respuesta de una manera para que pueda resolver problemas no solo en Java, sino también en todos los demás lenguajes. Empecemos.

Entonces, ¿qué es un problema?

El Concise Oxford Dictionary (1995) define un problema como:

Un asunto dudoso o difícil que requiere una solución

y

Algo difícil de entender, lograr o tratar “.

Características de los problemas:

Todos los problemas tienen dos características en común:

  • Objetivos: Los problemas implican establecer un objetivo o un estado de cosas deseado y pueden incluir evitar una situación o evento.
  • Barreras: Si no hubiera barreras en el camino para lograr una meta, entonces no habría problema. La resolución de problemas implica superar las barreras u obstáculos que impiden el logro inmediato de los objetivos.

Ahora, ¿qué es la resolución de problemas?

La resolución de problemas es el proceso de trabajar a través de los detalles de un problema para llegar a una solución. La resolución de problemas puede incluir operaciones matemáticas o sistemáticas y puede ser un indicador de las habilidades de pensamiento crítico de un individuo.

Entonces, ¿cuáles son las habilidades necesarias para resolver problemas?

La resolución de problemas requiere dos tipos distintos de habilidades mentales:

  • Analítico: el pensamiento analítico o lógico incluye habilidades tales como ordenar, comparar, contrastar, evaluar y seleccionar. Proporciona un marco lógico para la resolución de problemas y ayuda a seleccionar la mejor alternativa de las disponibles al reducir el rango de posibilidades (un proceso convergente). El pensamiento analítico a menudo predomina en la resolución de problemas cerrados, donde las muchas causas posibles tienen que ser identificadas y analizadas para encontrar la causa real.
  • Creativo: el pensamiento creativo es un proceso divergente, que utiliza la imaginación para crear una amplia gama de ideas para soluciones. Requiere que miremos más allá de lo obvio, creando ideas que, al principio, parezcan poco realistas o no tengan una conexión lógica con el problema. Hay un gran elemento de pensamiento creativo para resolver problemas abiertos.

Las habilidades de pensamiento creativo se pueden dividir en varios elementos clave:

  1. Fluidez – Produciendo muchas ideas
  2. Flexibilidad : producir una amplia gama de ideas
  3. Originalidad – Produciendo ideas poco comunes
  4. Elaboración – Desarrollando ideas

Entonces, ¿cuáles son los diversos pasos de la resolución de problemas?

Entonces, ¿cuáles son algunos atajos para resolver problemas de manera efectiva?

  • Centrarse en la solución, no en el problema
  • Tiene una mente abierta
  • Ver problemas neutralmente
  • Pensar lateralmente
  • Use lenguaje que cree posibilidades
  • Simplifica las cosas

Entonces, ¿ahora cómo resolver problemas usando Java?

Muy simple…

  • Desarrolle la lógica utilizando los pasos explicados anteriormente.
  • Implemente la lógica en Java

Entonces, ¿cuáles son algunos buenos recursos para aprender a resolver problemas en Java?

  • Estructuras de datos y resolución de problemas usando Java por Mark Allen Weiss

Encuentre soluciones aquí: http://www.cse.chalmers.se/~holm…

También puedes referir libros como:

  • Estructuras de datos y análisis de algoritmos en Java por Mark Allen Weiss
  • Introducción a los algoritmos por Charles E. Leiserson, Clifford Stein, Ronald Rivest y Thomas H. Cormen
  • Estructuras de datos y algoritmos en Java por Robert Lafore

Espero que ya tenga clara la forma en que necesita abordar la resolución de problemas …

Resolver problemas es cazar. Es un placer salvaje y hemos nacido para ello. Entonces, piense diferente y comience a resolver problemas.

En lugar de pensar fuera de la caja, deshazte de la caja …

¡¡¡Disfruta aprendiendo!!! ¡Disfruta resolviendo!

“Un lenguaje de programación es de bajo nivel cuando sus programas requieren atención a lo irrelevante”.

– Alan Perlis

Para las etapas iniciales, el único lenguaje de programación que no requiere atención a lo irrelevante son los dibujos: círculos, cuadrados, flechas y texto garabateado en una pizarra. Y ni siquiera estoy seguro de decir UML (estrictamente): sí, es un dibujo, pero creo que está bien ser aún menos específico que eso. Los planes cambiarán de todos modos, principalmente porque surgirán mejores ideas durante el desarrollo. Entonces “deja algo a la imaginación” 🙂

Por supuesto, no puede simplemente dibujar cualquier cosa : ya debe ser competente en el idioma en el que va a escribir esto, debe saber lo que es posible y poder estimar al menos aproximadamente lo que será fácil . Resolver problemas con los juguetes (que se pueden resolver sin planificación previa o casi nula) puede ayudar con eso.

Pasos simples que sigo: –

  • Limite la entrada primero. Suponga que tiene que ordenar un millón de números de una lista y luego escribir un programa que pueda ordenar una lista de 5 a 10 números solamente.
  • Esto ahorra tiempo.
  • La depuración es más fácil
  • Comprende el problema tomando un escenario de la vida real. De nuevo, ordenando un número. Visualiza el problema en tu mente. Piensa en millones de personas frente a ti y tienes que ordenarlas.
  • Mantenga su entrada y salida intacta. Asegúrese de tener los datos de entrada limpiados como necesita en su programa con el tipo de datos deseado. Digamos que use la entrada “1 2 3 ″ un tipo de cadena, pero es posible que necesite tenerlo como una lista a = [1, 2, 3] para un procesamiento más fácil.
  • Escriba el código según sea necesario y vea si funciona. No hay problema si no lo hace porque en su mayoría no lo hace. Ahora, comience a rastrear el programa con la entrada estática que proporcionó.
    • Tome la primera entrada y lea cada línea de entrada de código y salida respectiva, y así sucesivamente para todas las iteraciones. Sé que esto puede parecer una tarea perezosa, pero créanme que mejorarán cada vez más en la depuración y encontrar la causa raíz de un problema. Llegará a una situación en la que incluso con solo mirar el código de otra persona podrá encontrar el problema que lo causa.

    Espero que esto ayude.

    Tiene varias opciones de enfoque de diseño dado que está utilizando un lenguaje híbrido, Java, que admite múltiples paradigmas.

    Estos incluyen el uso de programación modular (procedimientos y subrutinas), programación estructurada mediante descomposición funcional, programación orientada a objetos y un enfoque de modelado de información o modelado de flujo de datos.

    Aprenda y use un enfoque apropiado para su problema.

    [Consulte Comprensión de un enfoque orientado a objetos y alternativas para obtener más información sobre estos.]

    El enfoque que utilice dependerá del tipo de problema o sistema que esté resolviendo o representando en el código, p. Ej.

    1. Sistemas transaccionales, basados ​​en acciones que deben registrarse, generalmente por razones comerciales o legales.
    2. Sistemas continuos no transaccionales, como el software que controla un elevador, un sistema transportador de almacén o un sistema de gestión de motores de vehículos.
    3. La informática, la infraestructura informática y los proyectos de soporte incluyen marcos, bibliotecas, lenguajes, servidores y programación de sistemas.
    4. Proyectos de información, ciencia de datos y análisis.
    5. Juegos y otros.

    Un enfoque orientado a objetos es particularmente adecuado para los tipos 1 y 2, donde el dominio del problema se representa como un Modelo de dominio. Una alternativa común es el modelado de información (más conocido por su artefacto: el diagrama de entidad-relación) donde los conceptos del dominio se representan como tablas de base de datos, columnas y restricciones.

    Enumere las características que necesitará para resolver ese problema y comience a crear módulos que implementen esas características. Haga diferentes clases para cada módulo y utilícelas en consecuencia. Para esto debe ser claro con el concepto de paquetes en Java y Java Access Modifiers.

    Use anotaciones adecuadas para nombrar funciones y variables. Use interfaces y constantes cuando sea necesario. Implemente el inicio de sesión en su aplicación, ya que le ayudará a depurar su aplicación de manera muy rápida y fácil.

    Si el problema lo permite, utilice un marco adecuado para escribir el código Java adecuado. Supongo que si realiza un seguimiento de todas las cosas anteriores, podrá resolver el problema fácilmente.

    1.) Comprender el problema

    a.) Identifique todas las restricciones.

    b.) Identifique el tamaño de los datos.

    c.) Tomar decisiones básicas sobre complejidad.

    2.) Resuelve el problema.

    a.) Si el problema es demasiado difícil, resuelva un problema relacionado más fácil.

    b.) Si a.) no es factible / posible, intente eliminar la restricción que está obstaculizando su progreso.

    c.) Intente aplicar una solución de fuerza bruta y luego mejore desde allí.

    Gracias por a2a!

    Esta es una gran pregunta y un artículo o respuesta no es suficiente para explicar esto a fondo. Estoy bastante impresionado con la respuesta escrita aquí por Vladislav Zorov.

    Por mucho que quiera explicar esto, creo que lo guiaría a la analogía y la noción exactas para resolver un problema.

    Siga este enlace y lea el artículo por completo: 60 estrategias de resolución de problemas – DZone Java

    ¡Espero que haya ayudado!

    Intente dividir el problema en subproblemas y resolver subproblemas, luego combine el resultado de todos los subproblemas para obtener la solución del problema completo.

    Desglosar el problema en subproblema también ayuda a comprender el problema muy bien, lo que ayuda en el proceso de pensamiento de solución.

    More Interesting

    ¿Qué es la recurrencia en análisis de diseño y algoritmos?

    Si quiero resolver problemas del mundo real, ¿qué debo hacer, encontrar esos problemas y luego aprender las estructuras de datos y algoritmos requeridos o viceversa?

    ¿Es mejor hacer InterviewBit ahora (actualmente estoy en mi quinto semestre) o hacer SPOJ ahora y luego hacer InterviewBit solo 3 o 4 meses antes de las entrevistas? Solo conozco algunas estructuras de datos y algoritmos básicos. He hecho 40 problemas en SPOJ.

    Cómo encontrar un trabajo de programación de algoritmos y no solo escribir aplicaciones CRUD

    ¿Cuál es el mejor libro sobre estructuras de datos y algoritmos en Java?

    ¿Debo aprender algoritmos si quiero ser desarrollador web / móvil?

    ¿Por qué en Java, la memoria es liberada por el algoritmo Mark y Sweep y no por ningún otro algoritmo?

    ¿Existe una estructura de datos ordenada que se pueda insertar en O (logn) y buscar en O (1)?

    ¿Cuál es la diferencia entre una matriz y una variable?

    Cuando trato de entender una técnica como la memorización o lo que sea, me enfrento a muchos dolores y no lo entiendo de inmediato. Necesito intentarlo varias veces. ¿Es normal o debo obtener algoritmos y técnicas con al menos uno o 2 aciertos?

    ¿Cómo debo diseñar un buen algoritmo de disminución de tiempo?

    ¿Se puede implementar la imaginación usando algoritmos? ¿Hay algo que no podamos explicar a través de un algoritmo, incluso en el futuro?

    ¿Qué es un algoritmo para el reemplazo de página (memoria virtual) LRU y FIFO?

    ¿Qué es una primera búsqueda amplia?

    ¿Existen constructores de algoritmos comerciales Plug and Play que no requieren ninguna habilidad de codificación?