Autor Tema: Tiempos de un algoritmo.

0 Usuarios y 1 Visitante están viendo este tema.

31 Mayo, 2015, 01:39 pm
Leído 1434 veces

elcristo

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,201
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola. Estoy realizando un trabajo sobre un algoritmo, en el cual debo guardar unos tiempos y hacer medias para hacer algunas comparaciones. El algoritmo es el siguiente.

tiempos=[]
tiemposm1=[]
for n in [10..180,step=2]:
    for i in [1..1]:
        t11=cputime()
        p=2*ZZ.random_element(10^(2*n))+1
        while is_prime(p) == False:
            p=p+2
        t12=cputime()
        tiempos.append(t12-t11)
    tiemposm1.append(mean(tiempos))

Donde en tiempos guardo lo que tarda el algoritmo en encontrar una cantidad X (Ahora mismo 1, se especifica en el segundo bucle for) de primos del tamaño pedido (20,24,28...,360) y en tiemposm1 en teoría debería guardar la media que tarda en encontrar esa cantidad X de primos. Sin embargo me he dado cuenta que no hace eso, lo que hace es hacer la media de todos los tiempos. Es decir, si pongo por ejemplo 3 primos, la primera iteración me hace la media que tarda en encontrar 3 primos de tamaño 20, pero en la siguiente me hace la media de lo que tarda en encontrar 3 primos de tamaño 24 y también lo que tardó en encontrar los primos de tamaño 20, y eso no es lo que quiero.

¿Alguna idea de cómo podría reescribirlo para que haga lo que quiero?

Gracias.

01 Junio, 2015, 03:13 am
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 5,428
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola elcristo

Parece python, no soy experto en programación por eso no sé distinguir entre un lenguaje y otro.

Me preguntaba si "tiempos" se puede definir como una lista de listas (como [[1,2],[3,4],[4,2]]) y a la función "mean" enviarle solo el elemento (lista anidada) deseado y no toda la lista.

Saludos

Podría ser algo como lo siguiente:

a=[]
 for i in range(4):
   b=[]
   for j in range(4):
      b.append(4*i+j+1)
   a.append(b)


Es decir yo haría el siguiente cambio

...
tiempos=[]
tiemposm1=[]
for n in [10..180,step=2]:
    b=[]
    for i in [1..1]:
        t11=cputime()
        p=2*ZZ.random_element(10^(2*n))+1
        while is_prime(p) == False:
            p=p+2
        t12=cputime()
        b.append(t12-t11)
    tiempos.append(b)
    tiemposm1.append(mean(b))
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...