def test_update_from_list_res(self): """ -- Accede a un elemento de la lista, modifica su valor y verifica que devuelva 1 """ l=LinkedList() add(l,"hola") add(l,"jorge") res=update(l,"pepe",1) self.assertEqual(res,1)
def test_access_from_list(self): """ -- Accede a un elemento en una lista y verifica que acces() devuelva el valor correcto """ L=LinkedList() add(L,"hola") add(L,"jorge") res=access(L,1) self.assertEqual(res,"hola")
def test_update_from_list(self): """ -- Accede a un elemento de la lista y modifica su valor y luego verifica que sea se haya actualizado con dicho valor """ l=LinkedList() add(l,"hola") add(l,"jorge") update(l,"pepe",1) self.assertEqual(l.head.nextNode.value,"pepe")
def test_update_from_list_out_of_range(self): """ -- Accede a un elemento fuera dede la lista, modifica su valor y verifica que devuelva False """ L = LinkedList() add(L, "hola") add(L, "jorge") res = update(L, "pepe", 4) self.assertEqual(res, None)
def mejorCamino(self): menorValor = 0 ultimaPosicion = -555 # En caso de que se necesite ir a la ultima posición, se la guarda. seEncontroComparacion = False seEncontroPosicion = False for i in range(0, len(self.agent.decisiones)): if (self.agent.decisiones[i] != -1): if (self.agent.ultimaPosicion != i): #print("Empezando por ",i) menorValor = i seEncontroComparacion = True break else: ultimaPosicion = i if (seEncontroComparacion == False): menorValor = ultimaPosicion for i in range(menorValor + 1, len(self.agent.decisiones)): if (self.agent.decisiones[i] < self.agent.decisiones[menorValor] and self.agent.decisiones[i] != -1): if (self.agent.ultimaPosicion != i): menorValor = i seEncontroPosicion = True else: #print("Guardando ultimaposicion: ", i) ultimaPosicion = i if (seEncontroPosicion == False): if (seEncontroComparacion == False): #print("Se necesita la ultima posicion: ", i, ", reemplazando: ", menorValor) menorValor = ultimaPosicion self.guardarUltimaUbicacion(menorValor) if (menorValor == 0): #print("arriba", " menorvalor: " , menorValor) self.agent.posicionX = self.agent.posicionX - 1 elif (menorValor == 1): # print("abajo", " menorvalor: " , menorValor) self.agent.posicionX = self.agent.posicionX + 1 elif (menorValor == 2): #print("izq", " menorvalor: " , menorValor) self.agent.posicionY = self.agent.posicionY - 1 else: # print("der" , " menorvalor: " , menorValor) self.agent.posicionY = self.agent.posicionY + 1 # Las siguientes LinkedList son utilizadas para guardar las posiciones donde debe mostrarse una flecha por donde pasa el Agente. L = linkedlist.LinkedList() newNode = linkedlist.Node() newNode.value = self.agent.posicionX L.head = newNode newNode2 = linkedlist.Node() newNode2.value = self.agent.posicionY L.head.nextNode = newNode2 newNode3 = linkedlist.Node() newNode3.value = menorValor L.head.nextNode.nextNode = newNode3 linkedlist.add(self.caminoHecho, L)
def heapify(BH,L): """ Dada una lista crea un heap con complejidad temporal O(n) """ i = linkedlist.length(L) // 2 BH.bheaplist.head = L.head linkedlist.add(BH.bheaplist,0) while (i > 0): shiftDown(BH,i) i = i - 1
def insert(BH,k): """ Inserta un elemento en el heap. Si la lista esta vacia, se crea un elemento 0. Este ultimo no se utiliza, pero facilita las operaciones matematicas para acceder a los padres e hijos. """ pos=linkedlist.length(BH.bheaplist) if pos==0: linkedlist.add(H.bheaplist,0) pos=pos+1 linkedlist.insert(BH.bheaplist,k,pos) currentsize=linkedlist.length(BH.bheaplist)-1 shiftUp(BH,currentsize)
def test_search_element_from_list(self): """ -- Busca elemento en una lista con un unico elemento y verificar que encuentre la posicion """ L = LinkedList() add(L, "hola") add(L, "jorge") add(L, "como") res = search(L, "hola") self.assertEqual(res, 2)
def heapsort(L): BH = Bheap() listaInterna = linkedlist.LinkedList() #copiar valores for i in range(linkedlist.length(L) - 1, -1, -1): linkedlist.add(listaInterna, linkedlist.access(L, i)) heapify(BH, listaInterna) for i in range(length(BH)): if length(BH) == 1: primero = linkedlist.access(BH.bheaplist, 1) linkedlist.add(listaInterna, primero) else: shiftDown(BH, 1) # intercambia el primero con el ultimo primero = linkedlist.access(BH.bheaplist, 1) ultimo = linkedlist.access(BH.bheaplist, length(BH)) linkedlist.update(BH.bheaplist, primero, length(BH)) linkedlist.update(BH.bheaplist, ultimo, 1) # se coloco esta liena para que sea mas facil leer el codigo ultimo = primero # se agrega el primero a listaInterna y se elimina el ultimo elemento # del Bheap linkedlist.add(listaInterna, ultimo) linkedlist.delete(BH.bheaplist, ultimo) # actualizar valores for i in range(linkedlist.length(L)): linkedlist.update(L, linkedlist.access(listaInterna, i), i) # URL : https://repl.it/@BrunoFuentes/Binary-Heaps-y-HeapSort
def push(S, element): add(S, element) return
from algo1 import * from binary_heap import * from heap_sort import * import linkedlist L = linkedlist.LinkedList() linkedlist.add(L, 66) linkedlist.add(L, 72) linkedlist.add(L, 20) linkedlist.add(L, 12) linkedlist.add(L, 47) linkedlist.printLinkedList(L) heapsort(L) print("- - -") linkedlist.printLinkedList(L)
def enqueue(Q, element): add(Q, element) return
BH.bheaplist.head = L.head linkedlist.add(BH.bheaplist,0) while (i > 0): shiftDown(BH,i) i = i - 1 def length(BH): return linkedlist.length(BH.bheaplist)-1 if __name__ == "__main__": H=Bheap() insert(H,8) insert(H,1) insert(H,5) insert(H,4) print(H) minimun=delMax(H) print(H) print("----") L=linkedlist.LinkedList() linkedlist.add(L,4) linkedlist.add(L,3) linkedlist.add(L,2) linkedlist.add(L,1) linkedlist.add(L,12) linkedlist.add(L,255) linkedlist.add(L,1000) print(L) heapify(H,L) print(H)