Saludos, Comprendo como a de funcionar el algoritmo de busqueda exhaustiva, pero no se me ocurre como implementarlo para otros problemas…...

Pregunta de la clase:
Enumeración exhaustiva
Miguel Alexander Vásquez Ortega

Miguel Alexander Vásquez Ortega

Pregunta
studenthace 4 años

Saludos,

Comprendo como a de funcionar el algoritmo de busqueda exhaustiva, pero no se me ocurre como implementarlo para otros problemas… alguien mas me sigue?

5 respuestas
para escribir tu comentario
    Miguel Alexander Vásquez Ortega

    Miguel Alexander Vásquez Ortega

    studenthace 4 años

    AlejoCm, me encanto tu respuesta a pesar de que creo que no estas utilizando un algoritmo de fuerza bruta como lo son los de busqueda exahustiva o busqueda binaria (explicaste que complicarian el proceso, comprendo), creo que lo que planteaste esta increible y veo tengo que manejar mucha teoria sobre algo si deseo implementar estos algoritmos basicamente. Muchas gracias amigo

    Alejandro Cuello Maure

    Alejandro Cuello Maure

    studenthace 4 años

    Aqui te dejo un enlace, pegas el codigo y lo puedes entender mejor!

    https://cutt.ly/rkEE683

    Alejandro Cuello Maure

    Alejandro Cuello Maure

    studenthace 4 años

    Creo que la forma mas sencilla de resolverlo es usando funciones recursivas (una funcion recursiva es una funcion que se llama asi misma, las funciones recursivas son usadas para realizar procedimientos más "grandes" por cada paso, lo que se nos complicaría hacer lo mismo con un bucle for o un while).

    Yo lo implementé asi: subconjuntos.png

    la forma en que funciona es:

    por cada paso o llamada que hacemos, comprobamos si la lista no está vacía, si no lo esta.

    Hacemos una operacion que concatenará (unirá) el resultado de lo que nos arroje la funciones de la izquierda que vamos a llamar primero y la funcion de la derecha que se llamará despues de la izquierda, recuerda que las funciones recursivas se ejecutan de "atras para adelante", primero llega a la ultimo, despues se devuelve a su "estado anterior"

    Entonces, por cada funcion hacemos un juego, tomamos el primer numero de la otra lista (flecha verde) y en la otra llamada no lo tomamos (flecha verde).

    Screenshot_19.png

    y repetimos el mismo paso por cada llamada, cada llamado vamos haciendo la lista más y más pequeña para que en algun momento quede vacía y nos podamos devolver.

    Recuerda tambien que primero vamos a resolver la de un lado, terminamos con esa, nos devolvemos y nos metemos a resolver la otra y unimos lo que nos devuelven las dos funciones y asi sucesivamente se sigue devolviendo.

    photo_2021-02-09_09-10-24.jpg

    Disculpa si no se ve bien, lo que esta resaltado en amarillo es lo que nos devuelve cada llamada, y despues se une lo de cada "rama" si lo podemos ver así.

    Lo que dice el texto si no es legible es: "Conclusion: por cada paso que damos, tomamos el siguiente numero y a la vez no" refieriendose a las dos llamadas por cada llamada.

    Al principio es dificil de entender. Pero aqui esta lo bueno de programar que lo dificil se convierte en facil con practica.

    Aqui esta el codigo en python:

    def obtener_subconjuntos(numero_actual, conjunto): if len(conjunto) > 0: return obtener_subconjuntos(numero_actual, conjunto[1:]) + obtener_subconjuntos(numero_actual + [ conjunto[0] ], conjunto[1:]) return [numero_actual] if __name__ == '__main__': conjunto = [i for i in range(1, 4)] subcojuntos = obtener_subconjuntos([], conjunto) print(subcojuntos)

    Si no lo entiendes , vuelvelo a repasar y repasa las funciones recursivas hasta que lo entiendas, y recuerda nunca pares de Aprender ;)

    Miguel Alexander Vásquez Ortega

    Miguel Alexander Vásquez Ortega

    studenthace 4 años

    Bien, su ejemplo propuesto creo que es algun tipo de operacio de conjuntos... dado el caso y disculpa mi ignorancia, como crearias un programa que por busqueda exaustiva haga el proceso que recien muestras en tu ejemplo?

    Alejandro Cuello Maure

    Alejandro Cuello Maure

    studenthace 4 años

    Podemos decir que cuando no conocemos de lleno todas las posibles soluciones, digamos que el patron para reconocer donde implementar la enumeracion exhaustiva es cuando no tenemos una estructura definida y por eso nos vemos en la obligacion de generar todas las combinaciones posibles.

    Un ejemplo es visualizar todas las posibles combinaciones ade numeros en una lista de numeros:

    [1,2,3] => [[1], [2], [3], [1,2,3], [1,2], [1,3], [2,3]]

    Ahora podemos darle casos mas utiles, como simular eventos, simular posibles casos o alternativas para tomar la mejor decisión.

Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.

Curso de Pensamiento Computacional con Python
Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.