13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C<br />

• <br />

<br />

•<br />

0<br />

<br />

1 <br />

<br />

G •<br />

0<br />

<br />

1 <br />

<br />

A T<br />

0 1<br />

<br />

4.4. Tópicos<br />

Cada código livre <strong>de</strong> prefixo po<strong>de</strong> ser representado usando uma árvore binária:<br />

Começando com a raiz, o sub-árvore da esquerda representa os códigos que<br />

começam com 0 e a sub-árvore da direita representa os códigos que começam<br />

com 1. Esse processo continua em cada sub-árvore consi<strong>de</strong>rando os <strong>de</strong>mais<br />

bits. Caso todos bits <strong>de</strong> um código foram consi<strong>de</strong>rados, a árvore termina nessa<br />

posição com uma folha para esse código.<br />

Essas consi<strong>de</strong>rações levam diretamente a um algoritmo. Na seguinte implementação,<br />

vamos representar árvores binárias como estrutura da dados abstrata<br />

que satisfaz<br />

BinTree ::= Nil | No<strong>de</strong>(BinTree,Bintree)<br />

uma folha sendo um nó sem filhos. Vamos usar a abreviação<br />

Leaf ::= No<strong>de</strong>(Nil,Nil).<br />

Algoritmo 4.7 (PrefixTree)<br />

Entrada Um conjunto <strong>de</strong> códigos C livre <strong>de</strong> prefixos.<br />

Saída Uma árvore binária, representando os códigos.<br />

1 i f |C |= 0 then<br />

2 return Nil { não tem árvore }<br />

3 end i f<br />

4 i f C = {ɛ} then<br />

5 return Leaf { único código vazio }<br />

6 end i f<br />

7 Escreve C = 0C1 ∪ 1C2<br />

8 return No<strong>de</strong> ( PrefixTree (C1 ) , P refixTree (C2 ) )<br />

Contrariamente, temos também<br />

91

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!