No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Enumeraci贸n exhaustiva

12/31
Recursos

Aportes 315

Preguntas 40

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

A punta de enumeraci贸n exhaustiva Dr Strange se puso a ver en que futuro los vengadores ganaban a Thanos

Diagrama de flujo:

Relaciono mi c贸digo y como veo que varios estamos interesados en medir el tiempo de ejecuci贸n, este script tambi茅n imprime el tiempo que se demora ejecutando:

import time

tiempo_inicial = time.time()

objetivo = int(input('Escoge un entero: '))
respuesta = 0

while respuesta**2 < objetivo:
    print(respuesta)
    respuesta += 1

if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene una raiz exacta')

print(f'El programa demor贸 {time.time() - tiempo_inicial} segundos ')

Aqu铆 el resultado:

En seguridad inform谩tica, existe un tipo de ataque llamado de 鈥渇uerza bruta鈥, en el que un atacante trata de ingresar a un sistema probando TODAS las contrase帽as posibles hasta que logra ingresar al sistema. Pr谩cticamente es un algoritmo de enumeraci贸n exhaustiva en todo su esplendor.
Por eso muchos sitios implementaron medidas de seguridad para cuando alguien trata muchas veces de logearse con un mismo usuario.

Para no tener que estar escribiendo lo mismo cada vez que compilemos en consola, les dejo los pasos para configurar Visual Studio y lo haga autom谩tico.

En este video lo explica a detalle: https://www.youtube.com/watch?v=9Hh6fqieReE

Este es el famoso metodo llamado 鈥淔uerza Bruta鈥, es el peor algorithmo de todos, aunque el tiene razon al decir que las computadoras tienen un gran poder de computo, imagina si tienes que hacer esa consulta miles de veces en un minuto, ahi es donde en CS, se mira la manera de utilizar mejores algoritmos para mejorar los tiempos y recursos del sistema, basado en parametros de 鈥淭ime Complexity鈥 y 鈥淪pace Complexity鈥

Enumeraci贸n exhaustiva
Tambi茅n llamado 鈥渁divina y verifica鈥 donde simplemente generamos todas las posibilidades. T茅cnicamente este no es un algoritmo eficiente, sin embargo, dependiendo del universo de posibilidades puede ser que sea el mas adecuado, ya que las computadoras actuales son muy rapidas y por lo tanto la eficiencia de nuestro programa no es relevante, por lo tanto siempre ten en mente este tipo de algoritmo como uno de los primeros en implementar.

Vamos a crear un ejemplo de enumeraci贸n exhaustiva buscando la ra铆z cuadrada exacta de un numero.

objetivo = int(input('Escoge un entero: '))

# Inicializamos respuesta como 0
respuesta = 0

# Mientras respuesta^2 sea menor que nuestro numero objetivo.
while respuesta**2 < objetivo:
    respuesta += 1  # Respuesta aumentara en 1.

if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')

else:
    print(f'{objetivo} no tinene una raiz cuadrada exacta')

While, hasta que la condicion deje de ser verdadera
For, hasta que la condicion sea falsa

Qu茅 hermoso es todo esto!!! A煤n sigo sin entenderlo jaja

Cuidado con la enumeraci贸n exhaustiva:


Aunque es cierto que las computadoras son bien r谩pidas, estas tienen un l铆mite.

Prueben con este n煤mero: 134724234304. Ver谩n que no lo har谩 en segundos, se tomar谩 algunos minutos llegar a que es: 367048. 驴Por qu茅?

Porque el ordenador se hace m谩s lento al calcular a partir de las 1010 iteraciones, volvi茅ndose 1 segundo el tiempo de c谩lculo de 1011, 10 el de 10**12, y as铆 sucesivamente.

Es un caso extremo pero que da la moraleja que cuando las cosas escalan exponencialmente, S铆 es necesario optimizar.
Espero que les sirva para m谩s adelante. Salu2

No comparto esta forma de 鈥榩ensar computacionalmente鈥, decir que no importa que el algoritmo sea ineficiente porque las maquinas son cada vez mas r谩pidas es un error, imagina que esta aplicaci贸n corre en un servidor donde muchos usuarios est谩n usando esos algoritmos; siempre debemos escribir programas eficientes. David no es un experto en el tema, simplemente realiz贸 un curso antes de dictar esta otro curso.

Algoritmo de fuerza bruta 馃槑

El algoritmo es ineficiente pero las computadoras son muy rapidas.
es un algoritmo ineficiente pero EFICAZ.

Hallazgo de raiz cuadrada exacta por ennumeracion exhaustiva
Por favor digite un numero: 1000000000000
1000000 es la raiz cuadrada exacta de 1000000000000

hizo un millon de intentos y se demoro 1 segundo!!!

Me est谩 gustando mucho el curso
.

A prueba de errores si introduces un valor de tipo float o string:



objetivo = int (input('Escoge un numero entero: '))

respuesta = 0

while respuesta**2 < objetivo:

    print(respuesta)

    respuesta += 1 

if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta} ')

else:
      print(f'{objetivo} no tiene una raiz cuadrada exacta ')


Esta chevere este python jejej no lo habia usado pero es muy intuitivo

objetivo = int(input('Ingrese un numero para verificar si tiene raiz='))

raiz = -1

for i in range(objetivo):
    if i*i== objetivo:
        raiz = i
        break
    elif i*i>objetivo:
        break
        


if raiz != -1:
    print(f'La raiz del numero {objetivo}, es {raiz}')
else:
    print(f'El numero {objetivo}, no tiene raiz')```

Les recomiendo este v铆deo para entender sobre los algoritmos
https://www.youtube.com/watch?v=U3CGMyjzlvM

Exc introduccion a los algoritmos.

Gracias.

Les comparto un ejemplo de ra铆z c煤bica, simplemente cambiamos el 2 por el 3 y modificamos la impresi贸n de texto.

Buena clase profe, quer铆a dejar clarada una cosa que me estuvo dando problemas a la hora de entender el c贸digo de esta clase. En el loop while, la condici贸n dice que mientras la respuesta al cuadrado sea menor al objetivo, se le sumar谩 1 a la respuesta. Aqu铆 la cuesti贸n, por qu茅 la respuesta llega a ser 4 si respuesta al cuadrado es IGUAL y no menor a objetivo. Pues cuando el bucle while evalua la condici贸n cuando la respuesta es 3, en esa iteraci贸n se le suma 1 a la respuesta y esta queda en 4, por eso aunque cuando la respuesta el 4 y esta elevada al cuadrado no cumple la condici贸n del while, la variable respuesta ya vale 4. Espero haberme explicado lo suficientemente bien 馃槂

Agregue algo de texto para comprende mejor la numeraci贸n exhaustiva.

objetivo = int(input('Escoge un entero: '))
respuesta = 0

while respuesta**2 < objetivo:
    print(f'{respuesta} al cuadrado es {respuesta**2}, que es menor a {objetivo}')
    respuesta +=1

if respuesta**2 == objetivo:
    print(f'La ra铆z cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no cuenta con una ra铆z cuadrada exacta')

Note: Hasta lo que he podido ver el l铆mite al momento de crear un programa de Python estar谩 limitado por nuestro propio conocimiento de matem谩ticas en general.

Era esc茅ptico frente a la eficiencia del algoritmo, pero despu茅s de una que otra prueba not茅 que s铆 es bastante eficiente.

p. ej. En mi c贸digo import茅 el modulo time para calcular el tiempo de ejecuci贸n, tambi茅n random para obtener un n煤mero aleatorio realmente grande y math, 煤nicamente con el prop贸sito de densificar un poco el programa.


El n煤mero aleatorio est谩 comprendido entre 3^(25) o 847.288.609.443 y 3^(30) o 205.891.132.094.649. Es decir, es un n煤mero realmente grande, pero sorprendentemente a la computadora no le va a tomar m谩s de 3 s determinar si tiene o no una ra铆z cuadrada exacta. 馃く

Cree esto que por medio de la fuerza bruta, encuentra cualquier password que le ingreses, esta bassado en un codigo creado en el curso basico de python.

Si quieren hacer capturas de pantalla de su c贸digo en VS Code, pueden instalar CodeSnap para que se vean as铆:

El codigo utilizando la nomenclatura vista en el curso basico de python, anterior a este

Excelente explicaci贸n.

muchas gracias

Lo borre luego de verlo en la clase, para escribirlo por mi cuenta nuevamente y entenderlo. Ac谩 se los dejo.
Creo que el Print(respuesta) fue lo que me ayudo a verlo desde una mejor perspectiva.

objetivo = int(input('Ingresa un numero entero'))
respuesta = 0

while respuesta**2 < objetivo:
    print(respuesta)
    respuesta += 1

if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')

else:
    print(f'{objetivo} no tiene una raiz exacta')```

Ac谩 mi ejercicio, a帽ad铆 al aviso de cuando la ra铆z cuadrada no sea exacta el resultado:

import math
num = int (input(('Escriba un n煤mero: ')))
raiz = 0

while raiz**2 < num:
    raiz += 1
    #print(raiz)

if raiz**2 == num:
    print(f'{num} tiene Ra铆z cuadrada exacta, es = {raiz}')
else:
    print(f'{num} no tiene ra铆z cuadrada exacta, su raiz cuadrada es = {math.sqrt(num)}')```
response = True

while response == True:
    objetive = int(input('Escoge un entero: '))
    respuesta = 0
    
    while respuesta**2 < objetive:
        print(respuesta)
        respuesta += 1


    if respuesta**2 == objetive:
        print(f'La raiz cuadrada de {objetive} es {respuesta}')

    else:
        print(f'El {objetive} no tiene una raiz cuadrada exacta')

    
    print('         驴Desea continuar?')
    print('             SI = 1')
    print('             NO = 2')
    option = int(input(': '))

    if option == 1:
        response = True

    else:
        response = False

Lo hice de esta forma

objetivo = int(input('Ingrese un numero entero'))
resultado = 1
while resultado <= objetivo:
    if resultado**2 == objetivo:
        print(f'la raiz cuadrada es: {resultado}')
    resultado+=1
    if resultado == objetivo:
        print('No se encontraron raices cuadradas')```

D贸nde profundizo m谩s sobre el tema

probar todo hasta que la encuentres, excelente frase

vscode es IDE?

Que incre铆ble ejemplo, me encanto esta clase.

## Esta programa permita calcular la Raiz Cuadrada exacta de cualquier numero, y podemos visualizar el proceso##
objetivo = int(input('Escoge un entero: '))
resultado = 0
while resultado**2 < objetivo:
    print(resultado, 'X', resultado,'=',resultado**2)
    resultado += 1
if resultado**2 == objetivo:
    print(f'la raiz de  {objetivo} es {resultado}')
else:
 print(f'{objetivo} No tienes raiz Cuadrada Perfecta')```

Se me ocurri贸 colocar un numero s煤per grande, ya ha pasado 4 minutos y aun no da respuesta

Consejo!!
entender bien como funciona este algoritmo es escencial para entender las siguientes clases 馃槈

La numeraci贸n exhaustiva es lo m谩s b谩sico dentro de los algoritmos

Yo con mi MacBook 2015

Muy interesante este tema de enumeraci贸n exhaustiva y utilizar print para ver que esta haciendo la maquina muchas gracias por los tips.

Recuerdo que cuando estaba en la universidad utilice muchas veces un m茅todo similar para tomar medidas con sensores, donde se deb铆an tomar cientos e incluso miles de medidas por segundo y analizarlas, y el pc lo hacia sin problema, es impresionante el poder y la velocidad que tienen los computadores hoy en d铆a!

Otra forma:

import math


def main():
    number = int(input('write number: '))
    if(math.sqrt(number) % 1 == 0):
        print('square root')
    else:
        print('no square root')


if __name__ == "__main__":
    main()

tuve que sentarme a leer la l贸gica detenidamente pregunt谩ndome el porque de cada cosa cuando lo entendi fue como :

Este ser铆a el tiempo en que se tardo en obtener la ra铆z cuadrada de 108638929:

Cabe mencionar que estoy trabajando con una raspberry pi4 de 8 GB de RAM. Puede variar dependiente de las caracter铆sticas del equipo. Pero como lo menciona el profesor, las computadoras actuales son muy muy r谩pidas.

De esta manera lo entend铆.
Ingreso: 5
CICLO
respuesta = 0
1x1= 1
2x2= 4
3x3= 9 (Me paso, me quedo con el anterior)
respuesta = 2

SI (2X2) ES IGUAL A 5
si
print(鈥渞espuesta鈥)
no
print(鈥淣o es exacta鈥)

Es como el algoritmo de 鈥渘o s茅 nada, vamos a ver qu茅 sale鈥. 馃槃

Excelente ejemplo y algoritmo!

12. Enumeraci贸n exhaustiva

  • Tambi茅n llamado 鈥渁divina y verifica鈥.
  • Las computadoras actuales son muy r谩pidas.
  • Uno de los primeros algoritmos que debes tratar.
objetivo = int(input('Escoge un entero: '))
respuesta = 0

while respuesta**2 < objetivo:
    print(respuesta)
    respuesta += 1

if respuesta**2 == objetivo:
    print(f'La ra铆z cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene una ra铆z cuadrada exacta')

Para las personas que llegan hasta ac谩 felicitaciones, no se rindan, ya que el profesor es uno de los mejores que he visto en Platzi hasta ahora, no te ense帽a solo c贸digo, sino que te ense帽a a pensar computacionalmente, seg煤n la l贸gica y eso es mucho m谩s importante que el c贸digo, puesto que si desarrollas esa l贸gica, ese criterio propio lo puedes plasmar donde sea.

Excelente profesor.

Atajo para abrir la terminal en VSCode: ctrl + J

Este algoritmo en complejidad de tiempo si no estoy mal es O de N por el bucle que hace, pero la verdad no hay necesidad del bucle, simplemente es sacarle la ra铆z al numero, o sea, elevarlo a la 1/2 y con modulo comprobar si sobra parte decimal, si sobra parte decimal diferente de 0 no es ra铆z cuadrada exacta, si nos sobra 0 como parte decimal, es ra铆z cuadrada exacta. As铆 reducimos la complejidad en tiempo de este algoritmo.

Buenas! como estan? Si bien no es objeto de la clase, comparto otra solucion posible a la incognita de buscar la raiz cuadrada exacta sin realizar una enumeraci贸n exaustiva 馃ゴ

Objetivo = int(input('Escoge un numero entero: '))
respuesta = (Objetivo ** (1/2))
if (respuesta)%1 == 0.0:
    print(f'la raiz cuadrada de {Objetivo} es {respuesta}')
else:
    print(f'{Objetivo} no tiene una raiz cuadrada exacta')

Un abrazo para todo la comunidad!

#Enumeraci贸n exhaustiva
objetivo = int(input('Escoge un entero: ')) #Encontrar la raiz cuadrada de un numero
respuesta = 0

while respuesta**2 < objetivo: #Mientras el cuadrado de un numero sea menor que el objetivo
    print(respuesta) #Di el numero actual
    respuesta += 1 #Agregale uno al numero actual

if respuesta**2 == objetivo: #Si se encuentra raiz cuadrada exacta
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')  #Imprime la oracion siguiente con las variables objetivo y respuesta
else: #Si no tiene variable exacta
    print(f'{objetivo} no tiene una raiz cuadrada exacta') #Imprime lo anterior```
#variables en la memoria
objetivo = int(input('escoge un entero:'))
respuesta = 0

#mientras el valor de 'respuesta al cuadrado' es menor que 'objetivo', sumar 1 al valor 'respuesta
while respuesta**2 < objetivo:
    respuesta += 1

#si 'respuesta al cuadrado' es igual a objetiv, ejecutar print
if respuesta**2 == objetivo:
    print(f'la raiz cuadrada de {objetivo} es {respuesta}')

#de otra forma, ejecutar este print
else:
    print(f'{objetivo} no tiene raiz cuadrada')```

Ire realizando este ejercicio con cada script que escriba en adelante, me ayuda mucho a comprenderlo y si necesito revisarlo de nuevo se me hace mucho mas facil

Existen diferentes algoritmos para encontrar soluciones a problemas y uno de estos es la enumeraci贸n exhaustiva. Este se refiere a probar uno por uno todos los pasos para poder encontrar la respuesta correcta. Es una manera de poder encontrar la soluci贸n, pero una de las m谩s ineficientes ya que estas probando uno por uno. Lo bueno es que las computadoras hoy en d铆a son tan potentes que problemas s煤per complejos que requieran un mont贸n de iteraciones se pueden realizar en cuesti贸n de segundos. Una prueba es el siguiente c贸digo:

import time


objetivo = int(input("Escoge un entero: "))
respuesta = 0

tiempo_inicial = time.time()


while respuesta**2 < objetivo:
    respuesta += 1

if respuesta**2 == objetivo:
    print(f"La raiz cuadrada de {objetivo} es {respuesta}")
else:
    print(f"{objetivo} no tiene raiz cuadrada exacta")

print(f"El programa demor贸 {time.time() - tiempo_inicial} segundos")```

Que buena explicaci贸n, como tip para los que vamos empezando es muy buena pr谩ctica imprimir los valores que va tomando la variable para entender como funciona el c贸digo 馃槂 es una de mis pr谩cticas favoritas cuando trato de entender alg煤n c贸digo nuevo

Ensayo y error!

muy bueno

este es mi aporte, lo hice multiplicando el mismo numero para quitar el ** 2

objetivo = int(input(f'escoge un entero: '))
respuesta = 0 

while respuesta * respuesta < objetivo:
    print(respuesta)
    respuesta += 1
if respuesta * respuesta == objetivo:
    print(f'la raiz cuadrada de objetivo {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene rai cuadrada exacta')

que buena clase, excelente persona.

Eso de f鈥檣formato}鈥 no lo sab铆a, perfecto cada d铆a se aprenden cosas nuevas!

Tengo python 3.4. As铆 es como lo escrib铆 y aprend铆 a transformar mis enteros a strings para poder imprimir. Estoy considerando seriamente actualizar a 3.7 para poder usar print(f鈥欌)

objetivo = int(input('Escoge un entero: '))
resultado = 0

while resultado**2 < objetivo:
    print(resultado)
    resultado += 1

if resultado**2 == objetivo:
    print('La raiz cuadrada de ' + str(objetivo) + ' es ' + str(resultado))
else:
    print(str(objetivo) + ' no tiene raiz cuadrada')

A partir de ahora PRINT STATEMENT para todo!

Es muy 煤til usar print() para verificar que pasa y solucionar errores l贸gicos

Cuando puso print(respuesta) comenc茅 a entender el proceso. La verdad es que es genial cuando ya tenes resuelto el proceso en s铆.

Para entender computacionalmente como funcionan los programas de software, es muy necesario aprender pseudocodigo con diagramas de flujo y realizar las pruebas de escritorio. As铆 se estimula el cerebro.

Tengo entendido que esto es parecido a la fuerza bruta o no?

El diagrama de flujo

Me gusta mucho eso de hacer print statement, siempre se entiende mejor lo que hace el algoritmo

Aqui presente mi reto, saludos

def enumeracion(objetivo):
    respuesta = 0

    while respuesta**2 < objetivo:
        print(respuesta)
        respuesta += 1

    if respuesta**2 == objetivo:
        print(f'La raiz cuadrada de {objetivo} es {respuesta}')
    else:
        print(f'{objetivo} no tiene una raiz cuadrada exacta')

def aproxima(objetivo):
    epsilon = 0.01
    paso = epsilon**2 
    respuesta = 0.0

    while abs(respuesta**2 - objetivo) >= epsilon and respuesta <= objetivo:
        print(abs(respuesta**2 - objetivo), respuesta)
        respuesta += paso

    if abs(respuesta**2 - objetivo) >= epsilon:
        print(f'No se encontro la raiz cuadrada {objetivo}')
    else:
        print(f'La raiz cudrada de {objetivo} es {respuesta}')
    
def binaria(objetivo):
    epsilon = 0.01
    bajo = 0.0
    alto = max(1.0, objetivo)
    respuesta = (alto + bajo) / 2

    while abs(respuesta**2 - objetivo) >= epsilon:
        print(f'bajo={bajo}, alto={alto}, respuesta={respuesta}')
        if respuesta**2 < objetivo:
            bajo = respuesta
        else:
            alto = respuesta

        respuesta = (alto + bajo) / 2

    print(f'La raiz cuadrada de {objetivo} es {respuesta}')

def run():
    margen('馃煡')
    objetivo = int(input('Escoge un numero: '))
    margen('馃煡')
    eleccion = int(input('Escoge un sistema para resolver la raiz cuadrada: 1 - Enumeraci贸n Exhaustiva | 2 - Aproximaci贸n | 3 - B煤squeda Binaria : '))
    
    if eleccion == 1:
        enumeracion(objetivo)
    elif eleccion == 2:
        aproxima(objetivo)
    elif eleccion == 3:
        binaria(objetivo)
    else:
        print(f'Escoge un n煤mero entero, {objetivo} no cumple con las indicaciones')

def margen(emoji): #Para no repetir tanto el margen
    print('')
    print('*' * 10, emoji, '*' * 10)
    print('')

margen('馃弫')
print(f'Este programa es para calcular la raiz cuadra con diferentes m茅todos')
margen('馃弫')
run()

Practica:

objetivo = int(input('Escoge un entero: '))
respuesta = 0

while respuesta**2 < objetivo:
    respuesta += 1
if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene raiz cuadrada exacta')
<#Enumeracion exhaustiva

def calcular_raiz_cuadrada_exacta (objetivo)
respuesta = 0
while respuesta **2 < objetivo:
  print (respuesta)
  respuesta +=1

if respuesta**2 == objetivo:
  print ( "la raiz cuadrada de", objetivo, "es", respuesta)

else :
  print( objetivo,"no tiene una raiz cuadrada exacta")

valor_objetivo = int(input("Elige un entero: "))
resultado = calcular_raiz_cuadrada_exacta(valor_objetivo)
print(resultado)
  
#Aproximacion
epsilon = 0.001
paso = epsilon ** 2

def raiz_cuadrada(objetivo):
    respuesta = 0.0

    while abs(respuesta ** 2 - objetivo) >= epsilon and respuesta <= objetivo:
        respuesta += paso

    if abs(respuesta ** 2 - objetivo) >= epsilon:
        return f"No se encontr贸 la ra铆z cuadrada de {objetivo}"
    else:
        return f"La ra铆z cuadrada de {objetivo} es {respuesta}"

# Ejemplo de uso
raiz_objetivo = int(input("Elige un entero: "))
resultado = raiz_cuadrada(raiz_objetivo)
print(resultado)
#Busqueda binaria

epsilon = 0.1
bajo = 0.0
alto = max(1.0, objetivo)

def raiz(objetivo):
    respuesta = (alto + bajo) / 2

    while abs(respuesta ** 2 - objetivo) >= epsilon:
        if respuesta ** 2 < objetivo:
            bajo = respuesta
        else:
            alto = respuesta
        respuesta = (alto + bajo) / 2

    return respuesta

# Ejemplo de uso
objetivo = int(input("Elige un entero: "))
resultado = raiz(objetivo)
print('La ra铆z cuadrada de', objetivo, 'es', resultado)> 

Muy bueno con lo que dijo como conclusion me quedo m谩s claro la Enumeraci贸n exhaustiva y solucionar un problema sino se tienen una mejor soluci贸n con todas las posibilidades y usar print cuando se tenga preguntas que est谩 haciendo tal parte del c贸digo.

para poder entender que era lo que pasaba tuve que pensar en el programa como una funci贸n matematica xd

x= int(input("escoge un numero entero: ")) #y=raiz(x)
y=0
while y**2 < x:
    y+=1
if y**2 == x:
     print(f'la raiz cuadrada de {x} es {y}')
else :
     print(f'{x} no tiene raiz cuadrada exacta')

Aprend铆 sobre la enumeraci贸n exhaustiva en la clase y c贸mo se puede utilizar para resolver una amplia variedad de problemas. En la clase se vio la Enumeraci贸n Exhaustiva Este algoritmo consiste en probar todas las posibilidades hasta encontrar la respuesta correcta o determinar que no existe una respuesta exacta. Aunque puede parecer ineficiente, las computadoras actuales son lo suficientemente r谩pidas como para que en t茅rminos pr谩cticos casi nunca importe. 隆Estoy emocionado de seguir aprendiendo sobre programaci贸n y algoritmos!

Enumeraci贸n exhaustiva

En t茅rminos generales, el algoritmo de enumeraci贸n exhaustiva implica la creaci贸n de un conjunto de posibles soluciones para el problema, y luego la evaluaci贸n de cada soluci贸n en busca de la mejor soluci贸n posible. En Python, esto se puede lograr mediante el uso de bucles para iterar a trav茅s de todas las posibles soluciones y compararlas entre s铆.
.
Por ejemplo, si se quisiera encontrar el n煤mero m谩s grande en una lista de n煤meros, se podr铆a utilizar un algoritmo de enumeraci贸n exhaustiva para iterar a trav茅s de cada n煤mero en la lista y compararlo con el n煤mero anteriormente identificado como el m谩s grande. Si se encuentra un n煤mero m谩s grande, se reemplaza el n煤mero actual m谩s grande con ese n煤mero.

-Ennumeraci贸n exhaustiva, ulal谩 se帽oir franc茅s
-Entonces, c贸mo se dice?
-De tin mar铆n de do pingu茅

<
objetivo = int(input('Escoge un entero: '))
respuesta = 0


while respuesta**2 < objetivo:
    respuesta += 1

if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}') 
else:
    print(f'{objetivo} no tiene una raiz exacta')
> 

Realice este ejercicio con node js:

console.log("Ingrese un numero entero: ")
const stdin = process.openStdin()
respuesta = 0

stdin.addListener("data", (data) => {
    while (respuesta**2 < Number(data)){
        console.log(respuesta)
        respuesta += 1
    }
    if( respuesta ** 2 == Number(data)){
        console.log(`La raiz cuadrada de ${Number(data)} es ${respuesta}`)
    }else{
        console.log(`${Number(data)} no tiene una raiz cuadrada exacta`)
    }
    process.exit();
})

Consiste en enumerar todas las posibilidades.
Y en cualquier caso es el primer algoritmo que debo descartar, si bien no es tan eficiente respecto a otros, es muy efectivo.
Se le puede llamar 鈥渁divina y verifica鈥.

entero = int(input('Por favor digita un n煤mero para calcular su ra铆z cuadrada exacta: '))
respuesta = 0

while respuesta **2 < entero:
		print(respuesta)
		respuesta +=1

if respuesta**2 == entero:
		print( f'La ra铆z cuadrada exacta de {entero} es {respuesta}')
else:
		print(f'La ra铆z cuadrada exacta de {entero} no existe')

Lo que estoy haciendo en el c贸digo anterior es que tome el n煤mero que le entregu茅 y me lo eleve a la segunda potencia.

Dentro del iterador tengo un condicional que servir谩 para detener mi ejecuci贸n, empiezo a iterar desde 0 a n asignado a la variable respuesta, si mi respuesta tiene ra铆z exacta su potencia ser谩 igual al n煤mero entero que ingrese.
Es decir estoy preguntandole: 驴Qu茅 n煤mero elevado a la 2 me devuelve mi n煤mero?

Si funciona y es muy sencillo

Como aportar una imagen en este recuadro?

Algo de teoria (libros) seria genial para profundizar al respecto

馃槃

馃槂

solo llegu茅 a que dar铆a m谩s de 10400, por eso me encanta la programaci贸n, realiza pasitos sencillos para llegar a la soluci贸n de algo casi importa

12-Enumeraci贸n exhaustiva

Tambi茅n llamado 鈥渁divina y verifica鈥 donde enumeramos todas las posibilidades, puede ser ineficiente, pero ahora las computadoras actuales son muy r谩pidas. Este debe ser uno de los 1ros algoritmos en pensar a la hora de solucionar problemas.

# Calcular la raiz cuadrada
# usamos libreria time para ver el tiempo de ejecucion
import time
tiempo_inicial = time.time()

objetivo = int(input('Escoge un entero: '))
respuesta = 0
# mientras la respuesta al cuadrado sea menor que el objetivo
# aumentar la respuesta en +1
while respuesta**2 < objetivo:
    print(respuesta) # Para ver los Nros que esta probando
    respuesta += 1
# si la raiz cuadrada de objetivo -> imprimir respuesta
if respuesta**2 == objetivo:
    print(f'La raiz cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene una raiz exacta')

print(f'El programa demor贸 {time.time() - tiempo_inicial} mili segundos')

Holaa, hice una comparaci贸n entre la forma exhaustiva y una mejora y vean la diferencia de tiempo en segundos:

import time

def exhautivo(number):
    print("De forma exhaustiva")
    start = time.perf_counter()
    i = 0
    while i**2 < number:
        i +=1

    if i**2 == number:
        print(f"La raiz de {number} es {i}")
    else:
        print(f"El numero {number} no tiene raiz exacta")

    end = time.perf_counter()
    print(f"Tiempo: {end-start}")

def mejorado(number):
    print("\nDe forma mejorada")
    start = time.perf_counter()
    
    raiz = number**0.5

    if  raiz % 1 == 0:
        print(f"La raiz de {number} es {int(raiz)}")
    else:
        print(f"El numero {number} no tiene raiz exacta")

    end = time.perf_counter()
    print(f"Tiempo: {end-start}")


number = int(input("numero: "))
exhautivo(number)
mejorado(number)```

Les dejo este peque帽o programa que calcula ra铆ces de cualquier 铆ndice

print(鈥欌)
print(鈥楤ienvenido a la calculadora de raices鈥)
print(鈥欌)
cantidad_de_veces = int(input('Introduzca la cantidad de raices a calcular: '))

while (cantidad_de_veces > 0):
entero = int(input('Introduzca un numero entero: '))
raiz = int(input('Introduzca el indice de la raiz: '))
raiz = float(1/raiz)
resultado = entero ** raiz
print (resultado)
cantidad_de_veces -= 1

yo los reto a algo; yo hice este programa , el cual lo compar茅 con el del profe y me di cuenta que es realmente ineficiente (aunque haga lo mismo).

Mi reto es que se den cuenta por qu茅 mi programa es ineficiente y el del profe no!!!
def is_cuadrado_exacto_v2(num:float):

aux = 0

while aux < num:
    
    if aux ** 2 == num:
        return aux
    
    aux += 1

return False

He aqui otra manera de realizar el reto鈥

numero = int(input("Escoge un numero entero: "))
respuesta = numero**0.5
i = 0

while i < respuesta:
    i += 1 
if i == respuesta:
    print("Tu numero tiene raiz cuadrada entera, es " + str(respuesta))
else:
    print("Tu numero no tiene raiz cuadrada entera")

Buscar hasta encontrar.

def run():
numero=int(input('Ingrese un numero '))
box={2,3,4,5,6}
if numero <=10:
print(鈥榮u numero es menor o igual a 10鈥, 'Su numero es ',numero)
else:
print(鈥榮u numero es mayor a 10鈥欌榯u numero es鈥,numero)

for i in box:
    if i==numero:
        print('El numero esta en box')
    else:
         print('El numero no  esta en box')  

if name==鈥main鈥:
run()

objetivo = int(input('Escope un entero: '))
respuesta = 0

while respuesta**2 < objetivo:
    print(respuesta)
    respuesta += 1 

if respuesta**2 == objetivo:
    print(f'la rais cuadrada de {objetivo} es {respuesta}')
else:
    print(f'{objetivo} no tiene raiz cuadrada exacta')

#Enumeracion exhaustiva / adivina o verifca

objetivo = int(input("Escoje un entero: "))
respuesta = 0

while respuesta**2 < objetivo:
respuesta += 1

if respuesta**2 == objetivo:
print(鈥榣a raiz cuadrada de 鈥 + str(objetivo) + str(respuesta))
else:
print(str(objetivo) + 鈥 no tiene raiz cuadrada exacta鈥)

Yo conozco la Enumeracion exhaustiva como ansiedad.

Personalmente me encanto esta clase, y la voz de locutor que tiene el profe ayuda mucho jajaja

Creo que ya entend铆 el prop贸sito de este curso.