def _ligacoes(self): """Retorna uma lista de prioridades contendo dicios campos origem, destino e ligação""" ligacoes = Heap(lambda x1, x2: IGUAIS if x1 == x2 else min(x1, x2)) for v1, lig, v2 in self._vertices_ligacoes(): ligacoes.inserir((v1.item, lig, v2.item), lig.get('distancia', INFINITO)) return ligacoes
def BuscaAEstrela(mapa, partida, destino): ''' Busca A* em um mapa ''' #inicializa a busca a partir do nó de partida t = TreeNode({"key":partida, "cost":mapa.getHeuristica(partida, destino)}) lista = Heap() custoAtual = 0 while(t.data["key"] != destino): # adiciona o custo atual + heuristica + custo até o nó vizinhos = mapa.getVizinhos(t.data["key"]) vizinhos = [ { "key":v, "cost": custoAtual + mapa.getHeuristica(v, destino) + mapa.getDistancia(t.Key(), v) } for v in vizinhos ] # AddChildren retorna os nós inseridos na árvore vizinhos = t.AddChildren(vizinhos) # monsta uma lista com novos vizinhos lista.append(vizinhos) # remove o menor da lista e soma o custo real newT = lista.pop(lambda x: x.Cost()) custoAtual += mapa.getDistancia(t.Key(), newT.Key()) t = newT #retorna o caminho em uma lista de keys caminho = [t.Key()] while t.father is not None: t = t.father caminho.append(t.Key()) caminho.reverse() return caminho
def teste_oPropriedade_topt_iraGerarUmErroSeOHeapEstiverVazio(): with raises(FalhaNaOperacao): Heap(None).topo
def arvorePronta(): nums = Heap(lambda x1, x2: IGUAIS if x1 == x2 else max(x1, x2)) nums.inserir(0) nums.inserir(1) nums.inserir(2) nums.inserir(3) nums.inserir(4) nums.inserir(5) nums.inserir(6) nums.inserir(7) nums.inserir(8) return nums
def testes_metodo_inserir(): heap = Heap(lambda x1, x2: IGUAIS if x1 == x2 else max(x1, x2)) heap.inserir(0) heap.inserir(1) assert heap.pai(0) is 1 assert heap.filhos(0) == tuple() assert heap.filhos(1) == (0, ) heap.inserir(2) assert heap.pai(0) is heap.pai(1) is 2 assert heap.filhos(0) == heap.filhos(1) == tuple() assert heap.filhos(2) == (0, 1) heap.inserir(3) assert heap.filhos(3) == (2, 1) assert heap.filhos(2) == (0, ) assert heap.filhos(0) == heap.filhos(1) == tuple() assert heap.pai(2) is heap.pai(1) is 3 assert heap.pai(0) is 2 heap.inserir(4) assert heap.filhos(4) == (3, 1) assert heap.filhos(3) == (0, 2) assert heap.filhos(0) == heap.filhos(2) == heap.filhos(1) == tuple() assert heap.pai(3) is heap.pai(1) is 4 assert heap.pai(0) is heap.pai(2) is 3 heap.inserir(5) assert heap.filhos(5) == (3, 4) assert heap.filhos(3) == (0, 2) assert heap.filhos(4) == (1, ) assert heap.filhos(0) == heap.filhos(2) == heap.filhos(1) == tuple() assert heap.pai(3) is heap.pai(4) is 5 assert heap.pai(0) is heap.pai(2) is 3 assert heap.pai(1) is 4 heap.inserir(6) assert heap.filhos(6) == (3, 5) assert heap.filhos(3) == (0, 2) assert heap.filhos(5) == (1, 4) assert heap.filhos(0) == heap.filhos(2) == heap.filhos(1) == \ heap.filhos(4) == tuple() assert heap.pai(3) is heap.pai(5) is 6 assert heap.pai(0) is heap.pai(2) is 3 assert heap.pai(1) is heap.pai(4) is 5 heap.inserir(7) assert heap.filhos(7) == (6, 5) assert heap.filhos(6) == (3, 2) assert heap.filhos(5) == (1, 4) assert heap.filhos(3) == (0, ) assert heap.filhos(0) == heap.filhos(2) == heap.filhos(1) == \ heap.filhos(4) == tuple() assert heap.pai(6) is heap.pai(5) is 7 assert heap.pai(3) is heap.pai(2) is 6 assert heap.pai(1) is heap.pai(4) is 5 assert heap.pai(0) is 3
def teste_oMetodo_quantidadeDeFilhos_iraGerarUmErroSeOHeapEstiverVazio(): with raises(FalhaNaOperacao): Heap(None).remover()
def testes_oMetodo_inserir_definiraARaizDaArvoreSeElaEstiverVazia(): heap = Heap(lambda x1, x2: IGUAIS if x1 == x2 else max(x1, x2)) heap.inserir(0) assert heap.topo == 0
def testes_metodo_remover_comPrioridades(): mat = 'matemática' psico = 'psicologia' neuro = 'neurociência' fis = 'física' comp = 'computação' geo = 'geografia' prog = 'programação' estudos = Heap(lambda x1, x2: IGUAIS if x1 == x2 else min(x1, x2)) estudos.inserir(mat, 1) estudos.inserir(psico, 3) estudos.inserir(neuro, 2) estudos.inserir(fis, 2) estudos.inserir(comp, 0) estudos.inserir(geo, 4) estudos.inserir(prog, 1) assert estudos.remover() == comp assert estudos.topo is mat assert estudos.filhos(mat) == (neuro, prog) assert estudos.filhos(neuro) == (psico, fis) assert estudos.filhos(prog) == (geo, ) assert estudos.filhos(psico) == estudos.filhos(fis) == \ estudos.filhos(geo) == tuple() assert estudos.pai(neuro) == estudos.pai(prog) is mat assert estudos.pai(psico) == estudos.pai(fis) is neuro assert estudos.pai(geo) is prog assert estudos.remover() == mat assert estudos.topo is prog assert estudos.filhos(prog) == (neuro, geo) assert estudos.filhos(neuro) == (psico, fis) assert estudos.filhos(psico) == estudos.filhos(fis) == \ estudos.filhos(geo) == tuple() assert estudos.pai(neuro) == estudos.pai(geo) is prog assert estudos.pai(psico) == estudos.pai(fis) is neuro assert estudos.remover() == prog assert estudos.topo is fis assert estudos.filhos(fis) == (neuro, geo) assert estudos.filhos(neuro) == (psico, ) assert estudos.filhos(psico) == estudos.filhos(geo) == tuple() assert estudos.pai(neuro) == estudos.pai(geo) is fis assert estudos.pai(psico) is neuro assert estudos.remover() == fis assert estudos.topo is neuro assert estudos.filhos(neuro) == (psico, geo) assert estudos.filhos(psico) == estudos.filhos(geo) == tuple() assert estudos.pai(psico) == estudos.pai(geo) is neuro assert estudos.remover() == neuro assert estudos.topo is psico assert estudos.filhos(psico) == (geo, ) assert estudos.filhos(geo) == tuple() assert estudos.pai(geo) is psico assert estudos.remover() == psico assert estudos.topo is geo assert estudos.filhos(geo) == tuple() assert estudos.remover() == geo assert estudos.vazio
def arvoreVazia(): return Heap(None)
def testes_metodo_inserir_informandoOParametroPrioridade(): mat = 'matemática' psico = 'psicologia' neuro = 'neurociência' fis = 'física' comp = 'computação' geo = 'geografia' prog = 'programação' estudos = Heap(lambda x1, x2: IGUAIS if x1 == x2 else min(x1, x2)) estudos.inserir(mat, 1) estudos.inserir(psico, 3) estudos.inserir(neuro, 2) assert estudos.filhos(mat) == (psico, neuro) assert estudos.filhos(psico) == estudos.filhos(neuro) == tuple() assert estudos.pai(psico) is estudos.pai(neuro) is mat estudos.inserir(fis, 2) assert estudos.filhos(mat) == (fis, neuro) assert estudos.filhos(fis) == (psico, ) assert estudos.filhos(psico) == estudos.filhos(neuro) == tuple() assert estudos.pai(fis) is estudos.pai(neuro) is mat assert estudos.pai(psico) is fis estudos.inserir(comp, 0) assert estudos.topo is comp assert estudos.filhos(comp) == (mat, neuro) assert estudos.filhos(mat) == (psico, fis) assert estudos.filhos(psico) == estudos.filhos(fis) == \ estudos.filhos(neuro) == tuple() assert estudos.pai(mat) is estudos.pai(neuro) is comp assert estudos.pai(psico) is estudos.pai(fis) is mat estudos.inserir(geo, 4) assert estudos.filhos(comp) == (mat, neuro) assert estudos.filhos(mat) == (psico, fis) assert estudos.filhos(psico) == estudos.filhos(fis) == tuple() assert estudos.filhos(neuro) == (geo, ) assert estudos.pai(mat) is estudos.pai(neuro) is comp assert estudos.pai(psico) is estudos.pai(fis) is mat assert estudos.pai(geo) is neuro estudos.inserir(prog, 1) # originalmente a prioridade era 0, mas será # alterad p/ 1 momentaneamente assert estudos.topo is comp assert estudos.filhos(comp) == (mat, prog) assert estudos.filhos(mat) == (psico, fis) assert estudos.filhos(prog) == (geo, neuro) assert estudos.filhos(psico) == estudos.filhos(fis) == \ estudos.filhos(geo) == estudos.filhos(neuro) == tuple() assert estudos.pai(mat) is estudos.pai(prog) is comp assert estudos.pai(psico) is estudos.pai(fis) is mat assert estudos.pai(geo) is estudos.pai(neuro) is prog
def testes_propriedade_tamanho_aposInserirItens(): nums = Heap(lambda x1, x2: IGUAIS if x1 == x2 else max(x1, x2)) assert nums.tamanho == 0 nums.inserir(0) assert nums.tamanho == 1 nums.inserir(1) nums.inserir(2) assert nums.tamanho == 3 nums.inserir(3) nums.inserir(4) nums.inserir(5) assert nums.tamanho == 6 nums.inserir(6) nums.inserir(7) assert nums.tamanho == 8
def teste_propriedade_niveis(): assert arvore.niveis == 4 assert Heap(None).niveis == 0 #vazia
def teste_IteradorInterFixado_iterarSobreUmaArvoreVazia(): with naoGeraErro(): for n in Heap(None).interFixado(): pass