34
1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305 Algoritmos e Estruturas de Dados II Prof. Jesús P. Mena-Chalco [email protected] 2Q-2015

Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

  • Upload
    lylien

  • View
    229

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

1

Aula 09 – Árvores Binárias de Busca Árvores de Huffman

MC3305Algoritmos e Estruturas de Dados II

Prof. Jesús P. [email protected]

2Q-2015

Page 2: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

2

Construindo a melhor árvore binária de busca?

Page 3: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

3

1MElementos(chaves)

Page 4: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

4

Page 5: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

5

Page 6: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

6

Page 7: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

7

Page 8: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

8

Page 9: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

9

10

3 80

1 4

0 2

60 90

7030

20

5

6

7

10

3

801

40 2

60

907030

205

6

7

Page 10: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

10

Teste01.c (tidia)

Page 11: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

11

Teste02.c (tidia)

 $ gcc  teste02.c  ­o teste02.exe $ ./teste02.exe 40000 < vetor4.dat

Log2(40000) = 15,288

Page 12: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

12

Teste02.c (tidia)

Page 13: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

13

Teste02.c (tidia)

Número de comparações realizadas na criação da árvore

Page 14: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

14

Árvores de Huffman(Huffman trees)

Page 15: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

15

Alfabeto & codificação

Considere um alfabeto contendo n símbolos e uma mensagem composta por símbolos deste alfabeto.

Deseja-se codificar a mensagem como um conjunto de bits (0 ou 1), atribuindo um código a cada símbolo, e concatenando-os para produzir uma mensagem codificada.

Exemplo:Alfabeto = {A,B,C,D}

Símbolo Código

A 010B 100C 000D 111

Page 16: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

16

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 010B 100C 000D 111

A mensagem ABACCDA pode ser codificada como:010100010000000111010

Aqui serão necessários 21 bits → Codificação ineficiente!

Page 17: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

17

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 00B 01C 10D 11

A mensagem ABACCDA pode ser codificada como:00010010101100

Aqui serão necessários 14 bits → Codificação eficiente!

Page 18: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

18

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 00B 01C 10D 11

A mensagem ABACCDA pode ser codificada como:00010010101100

Aqui serão necessários 14 bits → Codificação eficiente!

Podemos fazer algo melhor (menos bits)?

Page 19: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

19

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 0 B 110 C 10 D 111

A mensagem ABACCDA pode ser codificada como:0110010101110

Aqui serão necessários 13 bits → Codificação eficiente!

Códigos de tamanho variável!

Page 20: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

20

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 0 B 110 C 10 D 111

A mensagem ABACCDA pode ser codificada como:0110010101110

Aqui serão necessários 13 bits → Codificação eficiente!

Em mensagens de milhares de palavras, os símbolos mais frequentesDevem ter uma “melhor” (menor) codificação

Códigos de tamanho variável!

Page 21: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

21

Alfabeto & codificação

Alfabeto = {A,B,C,D}

Símbolo Código

A 0 B 110 C 10 D 111

O código de um símbolo não deve ser o prefixo de outro!

ABACCDA → 01100101011100110010101110 → ABACCDA

Page 22: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

22

Algoritmo de Huffman

O árvore de Huffman pode ser utilizado para criar este tipo de codificação.

O algoritmo de Huffman usa a árvore para compressão de dados.

Reduções dos tamanhos dos arquivos dependem das características dos dados neles contidos (valores oscilam entre 20-90%)

Símbolo CódigoA 0 B 110 C 10 D 111

Page 23: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

23

Algoritmo de Huffman

Exemplo: Considere um alfabeto = {a,b,c,d,e,f}

Fonte: Material de aula de C. de Souza et al. (MAC448/Unicamp)

Page 24: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

24

Algoritmo de Huffman

Alfabeto = {A,B,C,D}

Símbolo Código Freq

A 0 3B 110 1C 10 2D 111 1

ABACCDA → 0110010101110

B,1 D,1

Page 25: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

25

Algoritmo de Huffman

Alfabeto = {A,B,C,D}

Símbolo Código Freq

A 0 3B 110 1C 10 2D 111 1

ABACCDA → 0110010101110

B,1 D,1

BD,2

Page 26: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

26

Algoritmo de Huffman

Alfabeto = {A,B,C,D}

Símbolo Código Freq

A 0 3B 110 1C 10 2D 111 1

ABACCDA → 0110010101110

B,1 D,1

BD,2C,2

CBD,4

Page 27: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

27

Algoritmo de Huffman

Alfabeto = {A,B,C,D}

Símbolo Código Freq

A 0 3B 110 1C 10 2D 111 1

ABACCDA → 0110010101110

B,1 D,1

BD,2C,2

CBD,4A,3

ACBD,7

Page 28: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

28

Algoritmo de Huffman

Alfabeto = {A,B,C,D}

Símbolo Código Freq

A 0 3B 110 1C 10 2D 111 1

ABACCDA → 0110010101110

B,1 D,1

BD,2C,2

CBD,4A,3

ACBD,70 1

0 1

0 1

Page 29: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

29

Algoritmo de Huffman

Considere o alfabeto {E,I,A,D,C,G,B,F,H} e a seguinte frequência.

Contrua uma árvore de Huffman

Page 30: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

30

Algoritmo de Huffman

Page 31: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

31

Huffman.c (tidia)

Page 32: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

32

Huffman.c (tidia)

$ gcc huffman.c ­o huffman.exe

$ ./huffman.exe 7 < exemplo1.txt Tamanho do alfabeto: 4A : 3B : 1C : 2D : 1

$ ./huffman.exe 90 < exemplo2.txt  Tamanho do alfabeto: 9A : 15B : 6C : 7D : 12E : 25F : 4G : 6H : 1I : 14

Page 33: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

33

$ wc historias­da­meia­noite.txt  4168   41768   238961   historias­da­meia­noite.txt

$ ./huffman.exe 230000 < historias­da­meia­noite.txt 

Page 34: Aula 09 – Árvores Binárias de Busca Árvores de Huffmanprofessor.ufabc.edu.br/~jesus.mena/courses/mc3305... · 1 Aula 09 – Árvores Binárias de Busca Árvores de Huffman MC3305

34

$ ./huffman.exe 230000 < historias­da­meia­noite.txtTamanho do alfabeto: 51h : 2402i : 12038s : 14401t : 7974o : 20628r : 12188a : 26808d : 9243m : 41525e : 24705­ : 1490n : 9184x : 483f : 1708: : 129b : 1481c : 7024p : 4911l : 5876, : 2822v : 3325. : 2840g : 2122u : 9051

$ ./huffman.exe 230000 < historias­da­meia­noite.txtTamanho do alfabeto: 51h : 2402i : 12038s : 14401t : 7974o : 20628r : 12188a : 26808d : 9243m : 41525e : 24705­ : 1490n : 9184x : 483f : 1708: : 129b : 1481c : 7024p : 4911l : 5876, : 2822v : 3325. : 2840g : 2122u : 9051

…Numero de nos na arvore de Huffman: 101

Codigos de Huffman: o: 20628 : 000 ,: 2822 : 001000 .: 2840 : 001001 l: 5876 : 00101 i: 12038 : 0011 e: 24705 : 010 r: 12188 : 0110 b: 1481 : 0111000 ­: 1490 : 0111001 j: 640 : 01110100 9: 2 : 0111010100000000 y: 2 : 0111010100000001 4: 5 : 011101010000001 5: 11 : 01110101000001 +: 1 : 01110101000010000 k: 1 : 011101010000100010 $: 1 : 011101010000100011 w: 3 : 0111010100001001 3: 6 : 011101010000101

…Numero de nos na arvore de Huffman: 101

Codigos de Huffman: o: 20628 : 000 ,: 2822 : 001000 .: 2840 : 001001 l: 5876 : 00101 i: 12038 : 0011 e: 24705 : 010 r: 12188 : 0110 b: 1481 : 0111000 ­: 1490 : 0111001 j: 640 : 01110100 9: 2 : 0111010100000000 y: 2 : 0111010100000001 4: 5 : 011101010000001 5: 11 : 01110101000001 +: 1 : 01110101000010000 k: 1 : 011101010000100010 $: 1 : 011101010000100011 w: 3 : 0111010100001001 3: 6 : 011101010000101