Académique Documents
Professionnel Documents
Culture Documents
Definio
de objetos que uma fila suporta denominado capacidade da fila. Uma fila vazia tem
comprimento zero e uma fila cheia possui
comprimento igual a sua capacidade.
A ordem de enfileiramento em uma fila
segue a mesma ordem de desenfileiramento. Logo o primeiro objeto enfileirado
ser o primeiro a ser desenfileirado, o segundo enfileirado ser o segundo desenfileirado e assim por diante. Por essa razo
as filas so denominadas estruturas FIFO
(do ingls, First In First Out, ou, primeiro a
entrar primeiro a sair).
Uma fila (ou queue em ingls) uma estrutura de dados linear elementar que permite armazenar e recuperar objetos sobre
as seguintes restries,
1. Objetos devem ser inseridos (enfileirados) numa extremidade (final da fila)
e removidos (desenfileirados) da outra
extremidade (incio da fila). Ver Figura1.
2. S possvel ler dados dos objetos nas
extremidades da fila (incio e final). Os
demais objetos, denominados objetos
internos, no podem ser acessados diretamente.
Operadores de Filas
3. Uma fila que no comporta mais objetos (fila cheia) deve reportar tentativas de enfileiramentos sem sucesso ao
passo que uma fila sem objetos (fila vazia) deve reportar tentativas de desenfileiramento sem sucesso.
Create:
Operador responsvel por
construir uma nova fila.
Enqueue: Operador que enfileira um
novo objeto no final de uma fila consequentemente aumentando seu comprimento em uma unidade quando a estrutura no estiver cheia.
Final
Inicio
Figura 1: Esquema de fila
Algoritmos, Filas
End: Operador que retorna o valor no
objeto no final da fila.
A
i
B
f
Filas Sequenciais
Funo C REATE(n)
Q.M Alocar(n)
Q.n n
Q.i Q.f 0
Q.t 0
Retorne Q
Funo D ESTROY(ref Q)
Desalocar Q.M
Q.i Q.f Q.t 0
Algoritmos, Filas
Tabela 1: Descritor de uma fila Sequencial
Atributo
M
n
i
f
t
Operador
C REATE
E NQUEUE
D EQUEUE
B EGIN
E ND
E MPTY
F ULL
D ESTROY
Descrio
vetor base
capacidade da fila
ndice de M que corresponde ao incio da fila
ndice de M que corresponde ao final da fila
comprimento da fila
Argumentos
n
Q, x
Q
Q
Q
Q
Q
Q
Descrio
Cria uma fila sequencial de capacidade n
Enfileira chave x no final da fila Q
Desenfileira objeto do incio da fila Q
Retorna valor no incio da fila Q
Retorna valor no final da fila Q
Verifica se a fila Q est vazia
Verifica se a pilha Q est cheia
Elimina a fila Q
Algoritmo 3 Enfileiramento em fila sequencial
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Funo E NQUEUE(ref Q, x)
Se Q.t = 0 ento
Q.i Q.f 1
Q.M [1] x
seno
p 1 + Q.f mod Q.n
Se p 6= Q.i ento
Q.M [p] x
Q.f p
seno
Retorne Falso
Q.t Q.t + 1
Retorne Verdadeiro
fila contendo um elemento e a de fila contendo mais de um elemento. Se a fila contm apenas um elemento o teste da linha-3
obtm xito e os ndices Q.i e Q.f so apontados para fora da fila (linha-4). Do contrrio, se o teste na linha-3 falha ento o
incio da fila Q.i (que a extremidade de retiradas) precisa ser recalculado. Similar ao
que ocorre no enfileiramento, o reajuste de
Q.i deve ser feito pelo mecanismo da circularidade que garante que o ndice voltar a
1 ao tentar extrapolar o final de Q.M . O
novo valor de Q.i dado por,
1 + Q.i mod Q.n
3
Algoritmos, Filas
conforme
implementado
na
linha-6.
Quando Q est vazia o teste na linha3 falha e ento procede-se a linha-8 que
retorna Falso indicando que nenhum
desenfileiramento foi realizado devido a
fila estar vazia. Na linha-9 o comprimento
da fila Q.t diminudo em uma unidade
(note que esta linha s executada se
de fato um desenfileiramento ocorrer). O
Verdadeiro retornado na linha-10 indica
desenfileiramento com sucesso.
Filas Encadeadas
Funo D EQUEUE(ref Q)
Se Q.t > 0 ento
Se Q.t = 1 ento
Q.i Q.f 0
seno
Q.i 1 + Q.i mod Q.n
seno
Retorne Falso
Q.t Q.t 1
Retorne Verdadeiro
Na Figura-3 ilustrada uma fila encadeada. O no do-raiz da lista de base apontado por i ao passo que o ltimo no do
apontado por f . Esta ordem de escolha dos
rtulos das extremidades no aleatria.
De fato ela responsvel por manter em
O(1) as operaes de enfileiramento e desenfileiramento em filas encadeadas. Para
entender isso basta imaginar como ficam
operaes de insero e remoo de nodos
em cada extremidade. Na extremidade inicial, insero e remoo podem ser feitas
em O(1). Entretanto na extremidade final,
apesar de a insero poder ser feita em O(1)
(lembre-se que a referncia ao no do final
conhecida), a remoo deve ocorrer em O(n)
haja vista o ltimo no do no ter acesso ao
penltimo (para atualizar a referncia).
A Tabela-2 ilustra o descritor de uma
fila encadeada. Os atributos neste caso
so reduzidos, em relao s filas sequenciais, s referncias i e f respectivamente
para incio e final de fila, alm do comprimento t (quantidade de nodos). Os operadores so os mesmos das filas sequenciais distinguindo-se apenas pelo construtor,
que neste caso no possui argumentos de
entrada, e pela ausncia do operador F ULL
haja vista estruturas encadeadas no possurem restries de capacidade.
A Tabela-3 ilustra o descritor de um no
do de uma fila encadeada. exatamente a
Funo B EGIN(ref Q)
Retorne Q.M [Q.i]
3:
4:
Funo E ND(ref Q)
Retorne Q.M [Q.f ]
5:
6:
Funo E MPTY(ref Q)
Retorne Q.t = 0
Vazia?
7:
8:
Funo F ULL(ref Q)
Retorne Q.t = Q.n
Cheia?
Chave inicial
Chave final
Algoritmos, Filas
Tabela 2: Descritor de uma fila Encadeada
Atributo
i
f
t
Operador
C REATE
E NQUEUE
D EQUEUE
B EGIN
E ND
E MPTY
D ESTROY
Descrio
Referncia para o no do inicial da fila
Referncia para o no do final da fila
comprimento da fila
Argumentos
Q, x
Q
Q
Q
Q
Q
Descrio
Cria uma fila encadeada
Enfileira chave x no incio da fila Q
Desenfileira objeto do incio da fila Q
Retorna valor no incio da fila Q
Retorna valor no final da fila Q
Verifica se a fila Q est vazia
Elimina a fila Q
Campo Descrio
chave
Valor da chave no
no do
prox
Referncia ao no
do seguinte (vale
quando o ltimo
no do)
Funo D ESTROY(ref Q)
Enquanto Q.i 6= faa
N Q.i
Q.i Q.i.prox
Desalocar N
Q.f
Q.t 0
Algoritmos, Filas
Algoritmo 8 Enfileiramento em fila encadeada
1:
2:
3:
4:
5:
6:
Funo E NQUEUE(ref Q, x)
N .chave x
N .prox
Q.f.prox N
Q.f N
Q.t Q.t + 1
Funo B EGIN(Q)
Retorne Q.i.chave
3:
4:
Funo E ND(Q)
Retorne Q.f.chave
5:
6:
Funo E MPTY(Q)
Retorne Q.t = 0
5
5.1
Aplicaes de Filas
Bucketsort
1:
2:
Funo D EQUEUE(ref Q)
Se Q.t > 0 ento
N Q.i
Q.i Q.i.prox
Desalocar N
Q.t Q.t 1
Retorne Verdadeiro
seno
Retorne Falso
Algoritmos, Filas
Algoritmos, Filas
Algoritmo 11 Ordenao por Raiz (RadixSort)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
.
.
.
.
Enfileiramentos
Desenfileiramentos
5.2
Preenchimento em Imagens
Algoritmos, Filas
(m, n).
Consideremos o problema de preenchimento de uma regio fechada em uma imagem I, ou seja, dada uma imagem contendo uma disposio de pxels de mesma
cor que formam uma linha de contorno
fechada cujo interior deseja-se preencher
(com a mesma cor do contorno).
Seja uma imagem I dada de resoluo
10 10 cujos pxels podem assumir trs cores: branco, cinza e preto. Inicialmente I
uma regio branca contendo um contorno
preto fechado como ilustrado na Figura5. Deseja-se preencher em preto a regio
branca limitada pelo contorno preto. A
ideia partir de um pixel interno ao contorno (branco) e efetuar um preenchimento
que pinta gradativamente as vizinhanas e
se expande at que o contorno seja encontrado (veja Figura-6).
As etapas de um algoritmo de preenchimento so descritas a seguir,
p 1, q
p, q 1
p, q
p, q + 1
p + 1, q
Algoritmos, Filas
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Exerccios
Uma deque uma fila especial que permite enfileiramento e desenfileiramento em ambas extremidades. Uma deque sequencial usa de base um
10
Algoritmos, Filas
15. O que muda no algoritmo de preenchimento no caso de figuras com muitas cores? O contorno pode ser composto por
mais de uma cor? A fila precisa de mais
alguma condio de enfileiramento?
13. Ao ordenar-se inteiros de 32 bits pelo algoritmo da questo-12 devem ser realizadas
32 distribuies. Na prtica isso um desperdcio pois em muitos casos o maior inteiro (em bits) de um vetor precisa bem menos que 32 bits. Proponha um teste a ser
feito no final de uma distribuio que determine se a distribuio seguinte precisa
ou no ser executada. Qual a complexidade deste teste?
11
Algoritmos, Filas
12