• Nenhum resultado encontrado

PF5.1http://www.ime.usp.br/pf/algoritmos/aulas/la.html Filas

N/A
N/A
Protected

Academic year: 2022

Share "PF5.1http://www.ime.usp.br/pf/algoritmos/aulas/la.html Filas"

Copied!
49
0
0

Texto

(1)

Filas

Fonte: http://www.boreme.com/

PF 5.1

http://www.ime.usp.br/pf/algoritmos/aulas/la.html

(2)

Filas

Uma la (=queue) é uma lista dinâmica em que todas as inserções são feitas em uma extremidade chamada de m e todas as remoções são feitas na outra extremidade chamada de início.

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000

1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

000000 000000 000000 000000 000000 000000 000000 000000 000000

111111 111111 111111 111111 111111 111111 111111 111111 111111

0000 0000 0000 00

1111 1111 1111 11

000000 000000 000000 000

111111 111111 111111 111

inicio m

remove (=get) (=dequeue)

insere (=put) (=enqueue)

(3)

Filas

Assim, o primeiro objeto a ser removido de uma la é o primeiro que foi inserido. Esta política de

manipulação é conhecida pela sigla FIFO (=First In First Out)

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000 0000000

1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111 1111111

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

000000 000000 000000 000000 000000

111111 111111 111111 111111 111111

000000 000000 000000 000000 000000 000000 000000 000000 000000

111111 111111 111111 111111 111111 111111 111111 111111 111111

0000 0000 0000 00

1111 1111 1111 11

000000 000000 000000 000

111111 111111 111111 111

inicio m

remove (=get) (=dequeue)

insere (=put) (=enqueue)

(4)

Interface para las

Fonte: http://yosefk.com/blog

S 4.6, 4.8

(5)

Implementação

class Fila:

def __init__(self):

self.itens = [ ] def __str__(self):

return str(self.itens) def vazia(self):

return self.itens == [ ] def insira(self, item):

self.itens.append(item) def remova(self):

return self.itens.pop(0) def __len__(self):

return len(self.itens)

(6)

Distâncias

Fonte: http://vandanasanju.blogspot.com.br/

PF 5.2

http://www.ime.usp.br/pf/algoritmos/aulas/la.html

(7)

Rede de estradas

Considere n cidades numeradas de 0 a n-1 interligadas por estradas de mão única.

0

2

4

3 5

1

(8)

Comprimento

O comprimento de um caminho é o número de estradas no caminho, contanto-se as repetições Exemplo: 2-4-1-3-5-4-5 tem comprimento 6

0

1 3

5 4

2

(9)

Comprimento

O comprimento de um caminho é o número de estradas no caminho, contanto-se as repetições.

Exemplo: 2-4-1-3-5 tem comprimento 4

0

3

5 4

1

2

(10)

Distância

A distância de uma cidade c a uma cidade i é o menor comprimento de um caminho de c a i. Se não existe caminho de c a i a distância é innita Exemplo: a distância de 2 a 5 é 4

0

3

5 4

1

2

(11)

Distância

A distância de uma cidade c a uma cidade i é o menor comprimento de um caminho de c a i. Se não existe caminho de c a i a distância é innita Exemplo: a distância de 0 a 2 é innita

0

3

5 4

1

2

(12)

Calculando distâncias

Problema: dada um rede de estradas e uma cidade c, determinar a distância de c a cada uma das demais cidades

Exemplo: para c = 0 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(13)

Calculando distâncias

Fonte: http://catalog.flatworldknowledge.com/bookhub/

(14)

Simulação

i 0 1 2 3 4 5 q[i]

i 0 1 2 3 4 5 d[i]

0

2 1

3 5

4

(15)

Simulação

i 0 1 2 3 4 5 q[i]

i 0 1 2 3 4 5 d[i] 6 6 6 6 6 6

0

2 1

3 5

4

(16)

Simulação

i 0 1 2 3 4 5

q[i] 0 i 0 1 2 3 4 5

d[i] 6 6 6 6 6 6

0

2 1

3 5

4

(17)

Simulação

i 0 1 2 3 4 5

q[i] 0 i 0 1 2 3 4 5

d[i] 0 6 6 6 6 6

0

2 1

3 5

4

(18)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 i 0 1 2 3 4 5 d[i] 0 6 1 6 6 6

0

2 1

3 5

4

(19)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 i 0 1 2 3 4 5 d[i] 0 6 1 1 6 6

0

2 1

3 5

4

(20)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 6

0

2 1

3 5

4

(21)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 6

0

2 1

3 5

4

(22)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 6

0

2 1

3 5

4

(23)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 6

0

2 1

3 5

4

(24)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 6

0

2 1

3 5

4

(25)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 2

0

2 1

3 5

4

(26)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 2

0

2 1

3 5

4

(27)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 2

0

2 1

3 5

4

(28)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 i 0 1 2 3 4 5 d[i] 0 6 1 1 1 2

0

2 1

3 5

4

(29)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 1 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(30)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 1 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(31)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 1 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(32)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 1 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(33)

Simulação

i 0 1 2 3 4 5

q[i] 0 2 3 4 5 1 i 0 1 2 3 4 5 d[i] 0 3 1 1 1 2

0

2 1

3 5

4

(34)

Representação da rede

A rede de estradas será representada por um objeto rede de uma classe Rede tal que:

rede.existe_estrada(i,j) = True se existe estrada da cidade ipara a cidade j rede.existe_estrada(i,j) = False em caso

contrário

(35)

distancias

def distancias(c, rede):

'''(int, Rede) -> list

Recebe o índice c de uma cidade e uma rede de estradas com n cidades.

A função cria e retorna uma lista d[0:n] tal que para i= 0,...,n-1, d[i] é a distância da cidade c a cidade i.

Se não existe caminho da cidade c a cidade i então d[i]=n.

'''

(36)

distancias

# pegue o número de cidades da rede n = len(rede)

# crie o vetor de distância com

# 'infinito' em cada posição d = n * [n]

# a distância até origem é zero d[c] = 0

# crie a fila de cidades q = Fila()

# coloque a cidade origem na fila q.insira(c)

(37)

distancias

while not q.vazia():

# i é a cidade no início da fila i = q.remova()

# examine as cidades vizinhas de i for j in range(n):

if rede.existe_estrada(i,j) \ and d[j] > d[i]+1:

d[j] = d[i] + 1 q.insira(j) return d

(38)

Relações invariantes

No início de cada iteração do while a la consiste em zero ou mais cidades à distância k de c,

seguidos de zero ou mais cidades à distância k+1 de c,

para algum k

Isto permite concluir que, no início de cada iteração, para toda cidade i, se d[i] != n então d[i] é a distância de c a i

(39)

Consumo de tempo

O consumo de tempo da função distancias é proporcional a n2

O consumo de tempo da função distancias é proporcional a O(n2)

(40)

Condição de inexistência

Se d[i] == n para alguma cidade i, então

S = {v : dist[v]< n} T = {v : dist[v] ==n}

são tais que toda estrada entre cidades em S e cidades em T tem seu início em T e m em S

(41)

Redes

Fonte:

https://dhs.stanford.edu/gephi-workshop/

(42)

Agora, representação da rede . . .

A rede de estradas será representada por um objeto rede de uma classe Rede tal que:

rede.existe_estrada(i,j) = True se existe estrada da cidade ipara a cidade j rede.existe_estrada(i,j) = False em caso

contrário

Representaremos a rede através de uma estrutura de dados conhecida como matriz de adjacência.

(43)

Agora, representação da rede . . .

0 0 0

0 0 0

0 0 0 0

5

5

0

0 0 0 0 0 0

0 0 0 0 0

0 0

1 1 1

1 1 1

1 1

1 1

0

0

1 2 3 4 0

0 1 2 3 4

rede

adj

(44)

Classe Rede

class Rede:

def__init__(self, n):

'''(Rede, intC) -> None

Recebe um inteiro positivo n e retorna uma Rede com n cidades e sem estradas.

As cidades são números entre 0 e n-1.

self.adj[i][j] == 1, existe estrada self.adj[i][j] == 0, não existe estrada cd i a j.

'''self.adj = crie_matriz(n,n,0)

(45)

Classe Rede

def__str__(self):

'''(Rede) -> str

Recebe uma Rede self e cria

e retorna um string que representa a rede.

'''s = ''

adj = self.adj # apelido n = self.__len__()

for i in range(n):

for j in range(n):

s += str(adj[i][j]) + ' ' s += '\n'

return s

(46)

Classe Rede

def insira_estrada(self, i, j):

'''(Rede, int, int) -> None

Recebe uma Rede self e um par de inteiros representando cidades e insere na rede a estrada de i a j.

'''self.adj[i][j] = 1

(47)

Classe Rede

def existe_estrada(self, i, j):

'''(Rede, int, int) -> bool

Recebe uma Rede self e um par de inteiros representando cidades e retorna True se existe estrada de i a j e False em caso contrário.

'''return self.adj[i][j] == 1

(48)

Classe Rede

def __len__(self):

'''(Rede) -> int

Recebe uma Rede self e retorna o número de cidades na rede

'''return len(self.adj)

(49)

função crie_matriz()

def crie_matriz(n_lin, n_col, valor):

'''(int,int,obj) -> list of list

Recebe inteiros não negativos n_lin e n_col e cria e retorna uma matriz com n_lin linhas e n_col colunas em que toda posição é inicializada com valor.

'''matriz = []

for i in range(n_lin):

linha = []

for j in range(n_col):

linha.append(valor) matriz.append(linha)

return matriz

Referências

Documentos relacionados

Referência ao anexo I, secção I.1, da directiva: Pontos 5.4.1.1.1 e 5.4.1.1.6. Teor do anexo da directiva: Conteúdo do documento de transporte... Teor da legislação nacional:

(02) FIXAÇÃO DO NÚMERO DE VEREADORES EM REGIME DE PERMANÊNCIA:- Pelo Presidente da Câmara foi apresentada a proposta que seguidamente se transcreve:- “Proposta - FIXAÇÃO

OBJETO: A presente licitação tem por objetivo a contratação de empresa para aquisição de material de limpeza para atender as necessidades da Câmara Municipal

O processo de recuperação dos óleos usados através da extração por solventes, onde ele começa pelas matérias-primas: o óleo mineral usado e o solvente; e

Art. À SAEST, reserva-se o direito de realizar sindicâncias sobre as informações prestadas, bem como rever em qualquer momento o pagamento do auxílio financeiro e a concessão da

Há tempos, a Marvel Comics utiliza-se de maneira extremamente sagaz da abordagem multicultural em suas histórias, introduzindo uma vasta diversidade de heróis e vilões

[r]

3.1 Este Edital dirige-se a pesquisadores de instituições de Ensino Superior – IES brasileiras, públicas e privadas sem fins lucrativos, que possuam programas de