elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Python - Duda Algoritmo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Python - Duda Algoritmo  (Leído 3,253 veces)
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Python - Duda Algoritmo
« en: 27 Marzo 2010, 15:57 »

Código
  1. import math
  2.  
  3. def menor(a,b):
  4.    return a if(a <= b) else b
  5.  
  6. def raiz2(a,b):
  7.    c = a//b
  8.    if(math.fabs(b - c) <= 1):
  9.        return menor(b,c)
  10.    else:
  11.        raiz2(a,(b + c)//2)
  12.  
  13.  
  14.  
  15. a = 170000
  16. b = raiz2(a,3)
  17. print(b)
  18.  

¿Por qué razón no devuelve el valor que es 412?

PD: Depuré hasta que llega al printf y ahí no hallo el error.


« Última modificación: 28 Marzo 2010, 04:46 por algorythm » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Python - Duda Algoritmo
« Respuesta #1 en: 27 Marzo 2010, 23:23 »

Código
  1. import math
  2.  
  3. def menor(a,b):
  4.    return a if(a <= b) else b
  5.  
  6. def raiz2(a,b):
  7.    c = a//b
  8.    if(math.fabs(b - c) <= 1):
  9.        return menor(a,b)
  10.    else:
  11.        raiz2(a,(b + c)//2)
  12.  
  13.  
  14.  
  15. a = 170000
  16. b = raiz2(a,3)
  17. print(b)
  18.  

¿Por qué razón no devuelve el valor que es 412?

PD: Depuré hasta que llega al printf y ahí no hallo el error.

¿Qué algoritmo estás usando?
Pon el pseudocódigo del mismo, para ver si alguno que use python te ayuda.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Python - Duda Algoritmo
« Respuesta #2 en: 28 Marzo 2010, 04:45 »

Código:
Raiz2(a) = iter(a,3)
donde
        iter(a,x) =
                      sea c = [a/x] {[] = piso}
                      si |x - c| <= 1 contestar min(x,c)
                      sino
                            iter(a,[(x+c)/2]

PD: Modifiqué el menor(a,b) por menor(b,c)
En línea

Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Python - Duda Algoritmo
« Respuesta #3 en: 29 Marzo 2010, 02:20 »

Aún no entiendo la lógica del algoritmo :xD .. es decir, la finalidad :-\

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Python - Duda Algoritmo
« Respuesta #4 en: 29 Marzo 2010, 19:20 »

Se supone que para calcular una raíz cuadrada.

¿Cómo se llama el algoritmo?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Masita

Desconectado Desconectado

Mensajes: 120


pythoneando


Ver Perfil
Re: Python - Duda Algoritmo
« Respuesta #5 en: 29 Marzo 2010, 20:19 »

No entiendo muy bien la logica de tu algoritmo.... De todos modos si lo que quieres es hacer una raiz cuadrada, puedes hacerlo con el modulo math.

math.sqrt(a)
En línea

En el cielo estan suspendidas las palabras que cantamos en nuestros sueños....
gabymar

Desconectado Desconectado

Mensajes: 12



Ver Perfil
Re: Python - Duda Algoritmo
« Respuesta #6 en: 29 Marzo 2010, 23:24 »

Hola algorithm, parece que la recursividad te da un pequeño problema, la iteracion que encuentre el resultado devolvera con return el valor de la raiz, pero he ahi el problema, ¿ a quien le devuelve el valor?, pues a la iteracion anterior que es la que le llamo, y esta se queda con el valor, pues no hay un retorno hacia atras de este resultado.

   una solucion puede ser esta, si te das cuenta la funcion devuelve None o sea nada si no llegamos a la solucion, entonces cuando la solucion se alcance cada iteracion respondera a la anterior con el valor x.

   modifico, no es necesario comprobar la respuesta de las siguientes iteraciones, puesto que no habra respuesta hasta que el resultado sea el esperado.
   Saludos : Gaby

Código:

import math
 
def menor(a,b):
    return a if(a <= b) else b
 
def raiz2(a,b):
    c = a//b
    if(math.fabs(b - c) <= 1):
        return menor(b,c)  
    else:
        return raiz2(a,(b + c)//2)

 
 
 
a = 170000
b = raiz2(a,3)
print(b)

« Última modificación: 30 Marzo 2010, 09:20 por gabymar » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Python - Duda Algoritmo
« Respuesta #7 en: 30 Marzo 2010, 03:12 »

Muchas gracias gabymar, excelente respuesta...

Con respecto a las dudas anteriores, es simplemente un algoritmo para encontrar la raíz cuadrada de un número por método de bisección utilizando únicamente operaciones de alu.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda Algoritmo de Ordenamiento
Programación General
kernel19 4 2,201 Último mensaje 27 Diciembre 2010, 16:54
por BgCRaCK
Duda sobre algoritmo AES SERPENT TWOFISH
Criptografía
CH1N1 1 7,605 Último mensaje 12 Diciembre 2010, 18:54
por APOKLIPTICO
duda con algoritmo
Programación General
z_ane_666 1 1,612 Último mensaje 5 Mayo 2011, 23:40
por Valkyr
Duda algoritmo ajedrez en c++
Programación C/C++
oliverm 5 13,051 Último mensaje 21 Julio 2013, 00:09
por eferion
Algoritmo Genetico Python
Scripting
Camilo2001 0 3,425 Último mensaje 12 Marzo 2017, 04:21
por Camilo2001
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines