domingo, 24 de mayo de 2015

ALGORTIMO 3
BUSQUEDA EREW

#BUSQUEDA EREW
#OSCAR SALGADO ALAMILLA

import os
import math
from threading import Thread

#DEFINICION DE FUNCIONES
def hilo1(Temp2,i,j):
    Temp2.insert(j,Temp2[j-(2**i-1)])
   

def hilo2(K,Temp2,x,n):
    if(x<(n-1)):
        if(K[x]==Temp2[x]):
            Temp2[x]=x+1
        else:
            Temp2[x]=99999


def hilo3(Temp2,n,k):
    if(Temp2[(2**(k))-1]>Temp2[2**k]):
        Temp2[k]=Temp2[2*k]
    else:
        Temp2[k]=Temp2[(2**(k))-1]


def Broadcast(Temp,x,n):
    Temp2=[]
    Temp2=Temp
    Temp2.insert(0,numero)
    Temp2.insert(1,numero)
    i=1
    while(i<=lg):
        j=(2**(i-1))+1
        while(j<=2**i):
            t=Thread(target=hilo1,args=(Temp2,i,j))
            t.start()
            t.join()
            j=j+1
        i=i+1
       


def SearchPram(Temp,lista,n):
    i=0
    while(i<=n):
        t=Thread(target=hilo2,args=(lista,Temp,i,n))
        t.start()
        t.join()
        i=i+1


def MinPram(Temp,n):
    i=1
    while(i<=lg):
        j=1
        while(j<=int(n/(2**j))):
            t=Thread(target=hilo3,args=(Temp,n,i))
            t.start()
            t.join()
            j=j+1
        i=i+1




#PRICIPAL
print "=========  B U S Q U E D A   E R E W  =========="
a=[]
Temp=[]
lista=[]
x=int(raw_input("INGRESE EL TAMAÑO DEL VECTOR: "))
i=1
while (i<=x):
    n1=int(raw_input("INGRESE DIGITO: "))
    lista.append(n1)
    print lista
    i+=1
n=len(lista)
lg=int(math.log(n,2))

numero=int(raw_input("INGRESE EL DIGITO A BUSCAR: "))
print "========== SE OBTUVIERON LOS SIGUIENTES RESULTADOS =========="
print "------------------------------------------------------------------------"
print "NUMEROS INGRESADOS: "

print lista
Broadcast(Temp,numero,n)
print "------------------------------------------------------------------------"
print "\nVECTOR TEMPORAL: "
print Temp
SearchPram(Temp,lista,n)
print "------------------------------------------------------------------------"
print "\nINDICES:"
print Temp
MinPram(Temp,n)
h=1
while(h<len(Temp)):
    if(Temp[h]!=99999):
        pos=Temp[h]
        break
    h=h+1
print "------------------------------------------------------------------------"
print "DONDE ",numero," ESTA EN LA POSICION NUMERO: ",pos

os.system('pause')

No hay comentarios:

Publicar un comentario