You are on page 1of 18

Programa c ao I

Licenciatura em Engenharia Inform atica 20122013

PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Vitor Beires Nogueira Escola de Ci encias e Tecnologia Universidade de Evora


1.1

Introdu c ao
PI VBN

Um dicion ario e semelhante a uma lista


Numa lista os ndices s ao inteiros Num dicion arios os ndices pode ser de quase qualquer tipo

Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Um dicion ario e uma atribui c ao (mapping ) entre chaves (keys ) e um conjunto de valores (values ). Uma associa c ao key value e por vezes designada por item A fun c ao dict cria um novo dicion ario sem items
Exemplo

>>> eng2sp = dict() >>> print(eng2sp) {} >>> eng2sp[one] = uno >>> print (eng2sp) { one: uno }
1.2

Dicion ario (simplista) de Ingl es - Espanhol


PI VBN

Exemplo
Introdu c ao

>>> eng2sp = {one:uno, two:dos, three:tres} >>> print (eng2sp) {three: uno >>> print eng2sp[four] KeyError: >>> len(eng2sp) 3 >>> one in eng2sp True >>> uno in eng2sp False four tres, two: dos, one: uno} >>> print (eng2sp[one])

Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.3

Valores de um dicion ario


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios

Exemplo

Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

>>> eng2sp = {one:uno, two:dos, three:tres} >>> vals = eng2sp.values() >>> uno in vals True >>> print(vals) dict values([tres, dos, uno])

1.4

Dicion arios como um conjunto de contadores


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios

Considere que pretendemos fazer uma fun c ao que recebe uma string e conta o n umero de vezes que cada letra ocorre na string. Solu co es? Dependem da estrutura de dadosutilizada:
1 2 3

Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Utilizando 26 vari aveis, uma por cada letra do alfabeto. Utilizando listas. Ver a fun c ao ord Utilizando dicion arios.

1.5

Histograma
PI VBN Introdu c ao

Exemplo

Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

def h i s t o g r a m ( s ) : d = dict () for c in s : i f c in d : d [ c ] += 1 else : d[c] = 1 return d

Exemplo (Utiliza c ao)

>>> histogram(banana) {a:3, b:1, n:2}

1.6

Ciclos e dicion arios


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios

Exemplo (Escrever conte udo do dicion ario)

def p r i n t h i s t ( h ) : for c in h : print (c , h [ c ])

Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Exemplo (Utiliza c ao)

>>> print hist(histogram(banana)) a 3 n 2 b 1

1.7

Pesquisa inversa
PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

lookup : dada uma chave e um dicion ario, podemos facilmente obter o valor correspondente Mas como podemos proceder se tivermos o dicion ario e o valor e pretendermos obter a chave?
Podemos ter mais que uma chave para tal valor! N ao existe nenhum m etodo espec co para tal. Por isso, temos de fazer uma pesquisa inversa Exemplo (Reverse Lookup)

def r e v e r s e l o o k u p ( d , v ) : for c in d : i f d [ c ] == v : return c raise ValueError

1.8

Utilizando reverse lookup


PI VBN Introdu c ao Dicion arios como um conjunto de contadores

Exemplo (Utiliza c ao)

Ciclos e dicion arios Pesquisa inversa Dicion arios e listas

>>> h = histogram(parrot) >>> k = reverse lookup(h, 2) >>> k r >>> k = reverse lookup(h, 3) Traceback (most recent call last): File stdin>", line 1, in ? File stdin>", line 5, in reverse lookup ValueError

Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.9

Raise
PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios

A instru c ao raise tem um argumento opcional que pode ser utilizado para detalhar a mensagem de erro. Por exemplo, podemos fazer: >>> raise ValueError(value does not appear in the dictionary) Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: value does not appear in the dictionary

Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.10

Dicion arios e listas


Exemplo (Inversa de um dicion ario)
PI VBN Introdu c ao

def i n v e r t d i c t ( d ) : inv = dict () f o r key in d : v a l = d [ key ] i f val in inv : i n v [ v a l ] . append ( k e y ) else : i n v [ v a l ] = [ key ] return inv

Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Exemplo

>>> h = histogram(parrot) >>> inv h = invert dict(h) >>> inv h {1: [a, p, t, o], 2: [r]}
1.11

Keys must be hashable


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Exemplo

>>> t = [1, 2, 3] >>> d = dict() >>> d[t] = oops Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: list
Deni c ao (Hash)

Uma fun c ao de hash e uma fun c ao que recebe um valor (de qualquer tipo) e devolve um inteiro.

1.12

Memoization
PI VBN Introdu c ao Dicion arios como um conjunto de contadores

Exemplo (fun c ao fibonnaci)

Ciclos e dicion arios Pesquisa inversa

def f i b o n n a c i ( n ) : i f n == 0 : return 0 else : i f n == 1 : return 1 else : r e t u r n f i b o n n a c i ( n 1)+ f i b o n n a c i ( n 2)

Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.13

Grafo de chamadas de fibonnaci(4)


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Existe muita redund ancia Como resolver?


1.14

Utilizando dicion arios para representar grafos


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa

Resumidamente um grafo e como um conjunto de pontos (n os ) ligados por segmentos de recta (arestas ). Em grafos dirigidos, as arestas s ao direccionadas e setas. Existem imensos algoritmo de grafos para:
descobrir o caminho entre dois n os encontrar ciclos num grafo encontrar um caminho que passe por todos os n os

Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.15

Exemplo de um grafo utilizando dicion arios


PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa

Exemplo

Dicion arios e listas

grafo = {A: B: C: D: E: F:

[B, C], [C, D], [D], [C], [F], [C]}

Memoization Inteiros Long Utilizando dicion arios para representar grafos

1.16

Pesquisando caminhos
PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa Dicion arios e listas Memoization Inteiros Long Utilizando dicion arios para representar grafos

Exemplo
d e f f i n d p a t h ( graph , s t a r t , end , p a t h = [ ] ) : path = path + [ s t a r t ] i f s t a r t == end : r e t u r n path i f n ot ( s t a r t i n g r a p h ) : r e t u r n None f o r node i n g r a p h [ s t a r t ] : i f node no t i n p a t h : newpath = f i n d p a t h ( graph , node , end , p a t h ) i f newpath : r e t u r n newpath r e t u r n None

1.17

Utilizando a pesquisa
PI VBN Introdu c ao Dicion arios como um conjunto de contadores Ciclos e dicion arios Pesquisa inversa

Exemplo

Dicion arios e listas Memoization

>>> print (find path(grafo, A, D)) [A, B, C, D] Mais informa c ao sobre grafos e Python http://www.python.org/doc/essays/graphs.html

Inteiros Long Utilizando dicion arios para representar grafos

1.18

You might also like