aula 09 – Árvores binárias de busca Árvores de...
TRANSCRIPT
![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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/33.jpg)
33
$ wc historiasdameianoite.txt 4168 41768 238961 historiasdameianoite.txt
$ ./huffman.exe 230000 < historiasdameianoite.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](https://reader030.vdocuments.mx/reader030/viewer/2022021622/5baea64309d3f253098d9325/html5/thumbnails/34.jpg)
34
$ ./huffman.exe 230000 < historiasdameianoite.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 < historiasdameianoite.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