









Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Python programação
Tipologia: Notas de estudo
1 / 17
Esta página não é visível na pré-visualização
Não perca as partes importantes!










(^) Casos simples: (^) São aqueles que podem ser resolvidos trivialmente (^) Casos gerais: (^) São aqueles que podem ser resolvidos compondo soluções de casos mais simples
(^) Casos simples: O teorema é verdadeiro trivialmente (^) Casos genéricos: são provados assumindo se que todos os casos mais simples também são verdadeiros
(^) Um exemplo clássico de recursão é o algoritmo conhecido como busca binária que é usado para pesquisar um valor em uma lista ordenada (^) Chamemos de imin e imax os índices mínimo e máximo da lista onde a busca será feita (^) Inicialmente, imin = 0 e imax = len(lista)- (^) O caso base corresponde a imin == imax (^) Então, ou o valor é igual a lista [imin] ou não está na lista (^) Senão, podemos dividir o intervalo de busca em dois (^) Seja meio = (imin+imax)/ (^) Se o valor é maior que lista [meio] , então ele se encontra em algum dos índices entre meio+1 e imax (^) Caso contrário, deve se encontrar em algum dos índices
def testa(lista,valor): def busca_binaria(imin,imax): if imin==imax: return imin else: meio=(imax+imin)/ if valor>lista[meio]: return busca_binaria(meio+1,imax) else: return busca_binaria(imin,meio) i = busca_binaria(0,len(lista)-1) if lista[i]==valor: print valor,"encontrado na posicao",i else: print valor,"nao encontrado" >>> testa([1,2,5,6,9,12],3) 3 nao encontrado >>> testa([1,2,5,6,9,12],5) 5 encontrado na posicao 2
(^) Caso básico: a é uma lista vazia (^) Então a é permutação de b se b também é uma lista vazia (^) Caso básico: a[0] não aparece em b (^) Então a não é uma permutação de b (^) Caso genérico: a[0] aparece em b na posição i (^) Então a é permutação de b se a[1:] é uma permutação de b do qual foi removido o elemento na posição i
(^) Há estruturas de dados que são inerentemente recursivas, já que sua própria definição é recursiva (^) Por exemplo, uma lista pode ser definida recursivamente: (^) [] é uma lista (vazia) (^) Se A é uma lista e x é um valor, então A+[x] é uma lista com x como seu último elemento (^) Esta é uma definição construtiva, que pode ser usada para escrever funções que criam listas (^) Uma outra definição que pode ser usada para analisar listas é: (^) Se L é uma lista, então: L == [] , ou seja, L é uma lista vazia, ou x = L.pop() torna L uma lista sem seu último elemento x (^) Esta definição não é tão útil em Python já que o comando
def e_subseq(a,b): """ Retorna True sse a é subseqüência de b, isto é, se todos os elementos a[0..n-1] de a aparecem em b[j(0)], b[j(1)]... b[j(n-1)] onde j(i)
def permutacoes(lista): """ Dada uma lista, retorna uma lista de listas, onde cada elemento é uma permutação da lista original """ if len(lista) == 1: # Caso base return [lista] primeiro = lista[0] resto = lista [1:] resultado = [] for perm in permutacoes(resto): for i in range(len(perm)+1): resultado += [perm[:i]+[primeiro]+perm[i:]] return resultado
(^) Jogo que é um exemplo clássico de problema recursivo (^) Consiste de um tabuleiro com 3 pinos no qual são encaixados discos de tamanho decrescente (^) A idéia é mover os discos de um pino para outro sendo que: (^) Só um disco é movimentado por vez (^) Um disco maior nunca pode ser posto sobre um menor
def hanoi(n,origem,destino,temp): if n>1: hanoi(n-1,origem,temp,destino) mover(origem,destino) if n>1: hanoi(n-1,temp,destino,origem) def mover(origem,destino): print “Mover de“, origem, “para”, “destino”
| | |
======================= | | | | | | | | * ***** | *** ======================= | | | | | | | | * | ***** *** ======================= | | | | | | | | |
======================= | | | | | | | *** |