Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introduc¸a˜o a` Organizac¸a˜o de Arquivos: Aula 9 Departamento de Cieˆncia da Computac¸a˜o Instituto de Cieˆncias Exatas Universidade de Bras´ılia 1 / 51 Suma´rio Organizando Arquivos para Desempenho 1 To´picos em Teoria da Informac¸a˜o 2 Compressa˜o de dados 3 Recuperando espac¸o em disco 4 Uma introduc¸a˜o a ordenac¸a˜o interna e busca bina´ria. 5 Ordenac¸a˜o de chaves (Keysorting ou Tag Sort). 6 Ordenac¸a˜o de arquivos grandes. 2 / 51 Introduc¸a˜o Sistema Operacional O Sistema Operacional e´ um programa resposa´vel pelo gerenciamento dos recursos de um sistema de computac¸a˜o para seus mu´ltiplos usua´rios. Uma das func¸o˜es e´ formar uma interface entre os usua´rios e os dispositivos de memo´ria secunda´ria. Ele deve facilitar o mapeamento da visa˜o lo´gica do usua´rio na visa˜o f´ısica dos dispositivos de armazenamento. Com relac¸a˜o aos meios de armazenamento, as func¸o˜es do SO podem ser de baixo n´ıvel ou de alto n´ıvel. 3 / 51 Introduc¸a˜o Sistema Operacional As func¸o˜es de baixo n´ıvel referem-se a` transfereˆncia de blocos de bytes entre a memo´ria principal e a secunda´ria, compreendendo: Gerenciamento da memo´ria cache; Programac¸a˜o de Transfereˆncia de dados; Codificac¸a˜o e Decodificac¸a˜o dos dados; Codificac¸a˜o/Decodificac¸a˜o envolvem: Detecc¸a˜o e correc¸a˜o de erros, criptografia, compressa˜o de dados. 4 / 51 Introduc¸a˜o Sistema Operacional: Func¸o˜es de Alto N´ıvel As func¸o˜es de alto n´ıvel incluem: Estrutura do sistema de arquivos; Seguranc¸a (gerenciamento de usua´rios); Integridade; Alocac¸a˜o de espac¸o. 5 / 51 Introduc¸a˜o Motivac¸a˜o Vamos estudar algumas func¸o˜es do SO relacionas ao acesso a` memo´ria secunda´ria. Pore´m, nosso objetivo na˜o e´ analisar o problema desde o ponto de vista de um SO e sim da organizac¸a˜o de arquivos. Logo, alguns conceitos sera˜o somente introduzidos rapidamente, e outros sera˜o mais detalhados. Veremos formas de organizar ou mesmo reorganizar arquivos, visando melhorar desempenho, usando as te´cnicas de: Compressa˜o de dados (como tornar arquivos menores); Recuperac¸a˜o de espac¸os na˜o usados : gerados no processo de eliminar ou atualizar registros no arquivo; Reorganizac¸a˜o de arquivos: Introduc¸a˜o a “Internal Sorting” e busca bina´ria, Criando estruturas externas (´ındices) atrave´s das quais podemos acessar um arquivo. Um me´todo melhor de ordenac¸a˜o: KeySorting (Tag Sort) 6 / 51 Func¸o˜es de Baixo N´ıvel Caching Historicamente os processadores sa˜o mais ra´pidos que a memo´ria. Logo, um processador pode ficar ocioso por alguns ciclos enquanto o dado e´ lido da memo´ria. Na verdade e´ poss´ıvel fazer memo´rias mais ra´pidas, pore´m isso significa um maior custo de fabricac¸a˜o e venda. Uma soluc¸a˜o adotada pelos fabricantes e combinar memo´ria mais barata (lenta) com memo´ria mais cara (ra´pida). Normalmente, voceˆ tem uma maior quantidade de memo´ria lenta do que ra´pida. A RAM e´ feita com a tecnologia mais barata, enquanto o memo´ria cache do computador e´ feita com a memo´ria mais cara 7 / 51 Func¸o˜es de Baixo N´ıvel Caching A ideia geral e´ que, quando uma palavra e´ referenciada, ela e´ trazida da RAM para a cache, de modo que, da pro´xima vez que for utilizada pode ser acessada diretamente da cache. Logo, se a palavra e´ requerida k vezes, seria acessada uma vez da RAM e k − 1 vezes da cache. Se ‘c’ e´ o tempo me´dio de acesso a cache, ‘m’ e´ o tempo me´dio de acesso a RAM, e ‘h’ e´ a taxa de acerto (no exemplo anterior seria k−1 k ). Enta˜o o tempo de acesso a memo´ria e´: Tempo me´dio de acesso := c+ (1− h) ·m 8 / 51 Func¸o˜es de Baixo N´ıvel Programac¸a˜o de Transfereˆncia Nas operac¸o˜es de leitura e gravac¸a˜o, observa-se que o movimento do brac¸o das cabec¸as representa a parcela de tempo mais significativa. Um controlador de dispositivos inteligente organiza uma se´rie de transfereˆncias de tal forma de minimizar a perda de tempo recorrente ao movimento do brac¸o (seeking). 9 / 51 Func¸o˜es de Baixo N´ıvel Codificac¸a˜o de Dados Transformac¸a˜o de um certo conjunto de s´ımbolos em um outro conjunto de s´ımbolos. 10 / 51 Codificac¸a˜o de Dados Codificac¸a˜o de Dados A transformac¸a˜o (codificac¸a˜o) e´ feita para atingir um certo objetivo: Compressa˜o Representac¸a˜o Eficiente, tambe´m chamado de Codificac¸a˜o de Fonte Tambe´m chamada como: Codificac¸a˜o de Fonte Seguranc¸a dos aˆmbitos de Protec¸a˜o e Autenticac¸a˜o, tambe´m chamado de Criptografia Robustez Canal na˜o ideal (erro de transmissa˜o), tambe´m chamado de Codificac¸a˜o de Canal 11 / 51 Codificac¸a˜o de Dados Observac¸a˜o E´ importante notar que cada um deste objetivos normalmente envolve requisitos contra´rios aos outros: O principal objetivo dos algoritmos de compressa˜o e´ a reduc¸a˜o do comprimento da mensagem (codificac¸a˜o de fonte). Por outro lado, os co´digos de controle de erros implicam muitas vezes o aumento do comprimento das mensagens (codificac¸a˜o de canal). Dados que tenham sido previamente cifrados sa˜o geralmente muito dif´ıceis de comprimir. 12 / 51 Codificac¸a˜o de Dados: Robustez Robustez Detecc¸a˜o e Correc¸a˜o de Erros A natureza f´ısica do armazenamento pode ocasionar corrupc¸a˜o de dados. Para detecc¸a˜o de erro, deve-se incluir redundaˆncia na informac¸a˜o. A ideia principal e´ utilizar uma certa quantidade de bits de controle para um determinado bloco de informac¸a˜o. Os bits de controle devem ser gerados a partir dos bits que representam a informac¸a˜o e gravados junto com o bloco Ao ler a informac¸a˜o gera-se novamente os bits de controle, se na˜o conferem com os bits gravados, enta˜o a informac¸a˜o foi corrompida. Os bits de controle podem ajudar tambe´m na correc¸a˜o de erros. 13 / 51 Codificac¸a˜o de Dados: Criptografia Criptografia A criptografia e´ utilizada para transformar a informac¸a˜o de forma que se torne ileg´ıvel aos usua´rios na˜o autorizados. Existem diversas formas de criptografar uma mensagem. A maioria e´ baseada no uso de uma chave criptogra´fica. 14 / 51 Codificac¸a˜o de Dados: Compressa˜o Compressa˜o Compressa˜o de dados e´ o processo de codificar uma determinada informac¸a˜o utilizando uma menor representac¸a˜o. Os dois principais benef´ıcios trazidos pela compressa˜o de dados sa˜o: Capacidade de armazenamento de informac¸o˜es crescente: o uso de compressa˜o de dados pode aumentar significativamente a capacidade de armazenamento do sistema. “Um sinal comprimido ocupa menos espac¸o”. Transmissa˜o de dados crescente: informac¸o˜es digitais podem ser comprimidas antes de serem transmitidas de um mo´dulo para outro. “Um sinal comprimido requer menor largura de banda”. 15 / 51 Codificac¸a˜o de Dados: Conceitos Ba´sicos Entropia Na Termodinaˆmica: Medida da desorganizac¸a˜o de um sistema. Na Mecaˆnica Estat´ıstica: Medida da quantidade de incerteza que esta presente num sistema. Na Teoria da Informac¸a˜o: Medida da incerteza associada a uma varia´vel aleato´ria. Entropia de Shannon Quantifica a informac¸a˜o contida numa mensagem, normalmente na unidade de Bits. 16 / 51 Codificac¸a˜o de Dados: Conceitos Ba´sicos Entropia A entropia de uma varia´vel aleato´ria X com valores poss´ıveis {x1, . . . , xn} e´ definida como: H(X) := E(I(X)) Onde E() e´ o valor esperado e I() e´ a informac¸a˜o contida em X, ou auto-informac¸a˜o. Se I(X) e´ tambe´m uma varia´vel aleato´ria e´ p representa a func¸a˜o de massa de probabilidade, podemos escrever H(X) como: H(X) := n∑ i=1 p(xi)I(xi) = − n∑ i=1 p(xi) logb p(xi) Onde b e´ normalmente 2 (base bina´ria) 17 / 51 Codificac¸a˜o de Dados: Conceitos Ba´sicos Exemplo Consideremoso lanc¸amento de Moeda (Cara ou Coroa). Se a Moeda e´ justa enta˜o a probabilidade de cada um dos dois eventos acontecer e´ 1 2 . Portanto a entropia e´ H(X) = 1. E´ necessa´rio um bit para transmitir a informac¸a˜o a cada lanc¸amento. Figura: Probabilidade Vs Entropia 18 / 51 Compressa˜o de Dados Compressa˜o de Dados Existem dois tipos de compressa˜o: Sem perdas (Lossless) Com perdas (Lossy) A compressa˜o sem perdas, e´ aquela que destina-se a retirar somente a redundaˆncia nos dados. Em 1948 o pesquisador Claude E. Shannon publicou um artigo: “A Mathematical Theory of Communication”, que demostrava que a compressa˜o sem perdas tem um limite (denotada por H e´ definida como Entropia) Teorema (Teorema de Codificac¸a˜o de Fonte) E´ poss´ıvel comprimir um sinal sem perdas numa taxa NA˜O inferior a entropia do sinal. 19 / 51 Compressa˜o de Dados Lossless Vs Lossy A compressa˜o com perdas, e aquele que destina-se a retirar a redundaˆncia nos dados, e a irrelevaˆncia para um determinada aplicac¸a˜o. Shannon tambe´m desenvolveu a teoria da compressa˜o com perdas. Conhecida como a teoria da Taxa-Distorc¸a˜o (rate-distortion) Na compressa˜o com perdas, o sinal reconstru´ıdo na˜o e´ exatamente igual ao sinal original. Existe uma distorc¸a˜o, D, que e´ tolerada para um determinada aplicac¸a˜o. Vamos estudar somente algumas te´cnicas de compressa˜o de dados SEM PERDAS, ja´ que dentro da organizac¸a˜o de arquivos o objetivo e poder recuperar a informac¸a˜o dos dados completamente. 20 / 51 Compressa˜o de Dados Compressa˜o de Dados por Notac¸a˜o Diferente Considere o registro constitu´ıdo dos campos abaixo, relativos a aluno: < matr´ıcula >< nome >< enderec¸o >< uf >< curso >< opc¸a˜o >< departamento > < uf > e´ usualmente representado por uma sigla. Ao inve´s de usar dois bytes: DF, GO, MG, RJ, etc, pode-se usar um byte para representar os 26 Estados da Federac¸a˜o na forma bina´ria. < curso >< opc¸a˜o >< departamento > Pode-se usar co´digos correspondentes a essas entidades, em bina´rio (mais econoˆmico) ou uma string nume´rica. Reduc¸a˜o de Redundaˆncia Essa notac¸a˜o mais compacta, economiza bytes que eram redundantes para representar a mesma informac¸a˜o. 21 / 51 Compressa˜o de Dados Tabela: Tabela Geral Matr´ıcula Nome Curso Departamento 02/35879 Maria Vito´ria Bacharelado em Matema´tica 117-0 Departamento de Matema´tica MAT 03/01329 Pascual Monton Bacharelado em F´ısica 116-8 Departamento de F´ısica FIS 04/02556 Platina Constru- tiva Engenharia Ele´trica 115-3 Departamento de Engenharia Ele´trica ENE 04/03714 Gertrudes Sina- goga Bacharelado em Matema´tica 117-0 Departamento de Matema´tica MAT 04/03881 Miracema de Deus Engenharia Ele´trica 115-3 Departamento de Engenharia Ele´trica ENE Tabela: Tabela dos Departamentos ENE Dept de Engenharia Ele´trica FIS Dept de F´ısica MAT Dept de Matema´tica Tabela: Tabela de Cursos 115-3 Engenharia Ele´trica 116-8 Bacharelado em F´ısica 117-0 Bacharelado em Matema´tica 22 / 51 Compressa˜o de Dados Desvantagens Uso de co´digos bina´rios torna o arquivo menos leg´ıvel para humanos. Ha´ um custo associado a codificac¸a˜o e decodificac¸a˜o das entidades: Aumenta a Complexidade do Software. Devem ser programados mo´dulos para codificac¸a˜o e decodificac¸a˜o de cada entidade codificada: Criando arquivos e tabelas em memo´ria para tais entidades. Inserindo tais mo´dulos nos programas que cotizam os arquivos com entidades codificadas. Existe o tempo de codificar e decodificar Torna o processo mais lento 23 / 51 Compressa˜o de Dados Vale a pena usar esta te´cnica? Depende da aplicac¸a˜o! Quando na˜o usar compressa˜o Em arquivos pequenos (em certos casos); Arquivos com muitos programas diferentes tendo acesso a ele; Aplicac¸o˜es sem capacidade de lidar com bina´rios (ex. editor de texto); Quando usar compressa˜o Em arquivos grandes (milhares de registros); Em arquivos cujo poucos programas tenham acesso; Se a conversa˜o (codificac¸a˜o/decoficac¸a˜o) nestas compresso˜es for simples. Nestes casos, a economia de acesso compensa os custos de compressa˜o. 24 / 51 Compressa˜o de Dados Custo Vs Benef´ıcio Devemos considerar: Tempo de codificac¸a˜o e decodificac¸a˜o; Ganho de compressa˜o; Nu´mero de acesso ao arquivo; Exemplo Se um arquivo for pequeno e acessado frequ¨entemente, o custo sera´ maior que o benef´ıcio. 25 / 51 Compressa˜o de Dados Supressa˜o de Sequeˆncias Repetidas — Run Length Coding Indicada para arquivos nos quais sequeˆncias do mesmo byte sa˜o frequentes. O procedimento normalmente e´ utilizar um co´digo de escape: Supondo-se a ocorreˆncia de N repetic¸o˜es do caractere k, pode-se substituir essa ocorrencia por 3 bytes: < Co´gido de escape >< N >< k > Exemplo: Utilizac¸a˜o em um Arquivo de Texto GOOOOOOOL → G$7OL 26 / 51 Compressa˜o de Dados Supressa˜o de Sequeˆncias Repetidas — Run Length Coding Pode-se tambe´m definir um nu´mero minimo de repetic¸o˜es. Exemplo: Utilizando repetic¸a˜o minima de 3 em um arquivo bina´rio: Sequeˆncia de bytes (em hexadecimal): 22 23 24 24 24 24 24 24 24 24 24 24 25 25 26 26 26 26 26 26 26 26 24 24 Sequeˆncia compactada (em hexadecimal): 22 23 FF 0A 24 25 25 FF 08 26 24 24 24 bytes sa˜o reduzidos a 12 bytes. Esta te´cnica so´ e´ eficiente se existe varias sequeˆncias de caracteres repetidos. 27 / 51 Compressa˜o de Dados Co´digos de Comprimento Varia´vel Os co´digos com comprimento varia´vel sa˜o aqueles que os s´ımbolos codificados podem ter diferente tamanho (em bits); Os co´digos de comprimento varia´vel podem ser utilizados na compressa˜o sem perda; Os co´digos devem ser unicamente decodifica´veis, ou seja um conjunto de s´ımbolos codificados deve somente poder ser interpretado de um u´nica forma. Uma forma de garantir isso e´ que nenhum simbolo codificado seja o prefixo de outro; Os co´digos podem ser instantaneamente codifica´veis, ou seja um simbolo pode ser codificado assim que e´ recebido. Pore´m, os co´digos com comprimento varia´vel pode na˜o ser instantaˆneos, ou seja, TODA a mensagem necessita ser codificada para podermos decodificar. 28 / 51 Compressa˜o de Dados Co´digos de Comprimento Varia´vel Co´digos de comprimento varia´vel, em geral, sa˜o baseados no princ´ıpio de que alguns valores ocorrem mais frequentemente do que outros, portanto, os co´digos para estes valores devem ocupar o menor espac¸o. Ou seja, as letras (s´ımbolos emitidos pela fonte) com maior probabilidade de ocorreˆncia sa˜o codificadas com s´ımbolos menores e as letras com menor probabilidade de ocorreˆncia sa˜o codificadas com s´ımbolos maiores. 29 / 51 Compressa˜o de Dados Co´digos de Comprimento Varia´vel: Co´digo Morse O mais antigo co´digo de comprimento varia´vel; Utiliza apenas dois s´ımbolos no esquema de codificac¸a˜o: ponto (.) e trac¸o (-); As duas letras mais utilizadas do alfabeto ingleˆs (“e” e “t”) sa˜o codificadas com um ponto e um trac¸o, respectivamente. As outras letras do alfabeto recebem dois ou mais s´ımbolos, sendo que as letras mais utilizadas recebem menos s´ımbolos do que as menos utilizadas. 30 / 51 Compressa˜o de Dados: Co´digo Morse International Morse Code 1. A dash is equal to three dots. 2. The space between parts of the same letter is equal to one dot. 3. The space between two letters is equal to three dots. 4. The space between two words is equal to seven dots. UVWXYZ ABCDEFGHIJKLMNO QPRST 1234567890 Figura: Co´digo Morse. Figura retirada de http://en.wikipedia.org/wiki/Morse_code 31 / 51 Compressa˜o de Dados Co´digos de Comprimento Varia´vel: Co´digo de Huffman Te´cnica desenvolvida por David Huffman como um trabalho de aula do primeirocurso de teoria da informac¸a˜o ministrado por Robert Fano no MIT em 1951. E´ uma das te´cnicas mais utilizada para co´digos de comprimento varia´vel. O co´digo de Huffman e´ o´timo, ou seja, o tamanho me´dio dos s´ımbolos codificados e´ igual a entropia do sinal, se as probabilidades de ocorreˆncia das letras sa˜o potencias de dois (2−n). 32 / 51 Compressa˜o de Dados Co´digos de Comprimento Varia´vel: Co´digo de Huffman Vamos criar um co´digo de Huffman para uma fonte que gera letras do alfabeto {a, b, c, d, e} com probabilidades P (a) = P (c) = 0.2, P (b) = 0.4, P (d) = P (e) = 0.1. A entropia desta fonte e´ 2.122 bits por simbolo. Para fazer o co´digo de Huffman primeiro ordenamos as letras em forma decrescente de probabilidade. 33 / 51 Compressa˜o de Dados Letra Probabilidade Co´digo b 0.4 c(b) a 0.2 c(a) c 0.2 c(c) d 0.1 c(d) e 0.1 c(e) Tabela: Distribuic¸a˜o de probabilidade dos s´ımbolos Os dois s´ımbolos menos prova´veis sa˜o ‘d’ e ‘e’. Logo, combinamos as duas letras numa nova α1. E colocamos o co´digo para as letras combinadas da seguinte forma: c(d) = c(α1).0 c(e) = c(α1).1 Onde ‘.’ significa concatenac¸a˜o. 34 / 51 Compressa˜o de Dados Letra Probabilidade Co´digo b 0.4 c(b) a 0.2 c(a) c 0.2 c(c) α1 0.2 c(α1) Agora, os s´ımbolos menos prova´veis sa˜o ‘c’ e ‘α1’. Juntamos e criamos o co´digo: c(c) = c(α2).0 c(α1) = c(α2).1 Letra Probabilidade Co´digo b 0.4 c(b) α2 0.4 c(α2) a 0.2 c(c) 35 / 51 Compressa˜o de Dados Fazendo o mesmo racioc´ınio temos: c(α2) = c(α3).0 c(a) = c(α3).1 Letra Probabilidade Co´digo α3 0.6 c(α3) b 0.4 c(b) Logo: c(α3) = 0 c(b) = 1 36 / 51 Compressa˜o de Dados Com o co´digo de α3 obtemos os co´digos restantes: c(a) = c(α3).1 = 01 c(α2) = c(α3).0 = 00 c(c) = c(α2).0 = 000 c(α1) = c(α2).1 = 001 c(d) = c(α1).0 = 0010 c(d) = c(α1).1 = 0011 37 / 51 Compressa˜o de Dados Logo, temos a seguinte tabela de co´digos Huffman: Letra Probabilidade Co´digo b 0.4 1 a 0.2 01 c 0.2 000 d 0.1 0010 e 0.1 0011 Tabela: Co´digo de Huffman Note que: Nenhum co´digo e´ prefixo do outro e que os dois u´ltimos s´ımbolos possuem um co´digo do mesmo valor; O tamanho me´dio deste co´digo e´: l := 0.4 · 1 + 0.2 · 2 + 0.2 · 3 + 0.1 · 4 + 0.1 · 4 = 2.2 bits/s´ımbolo Assim a redundaˆncia deste co´digo e´ 2.2–2.122 = 0.078 bits/s´ımbolo 38 / 51 Compressa˜o de Dados Na˜o Unicidade do Co´digo de Huffman A principio para uma mesma fonte com probabilidades conhecidas, pode ser gerado va´rios co´digos de Huffman, isto e´, o co´digo na˜o e´ u´nico. Por exemplo, para a fonte anterior podemos gerar o seguinte co´digo. Letra Probabilidade Co´digo b 0.4 00 a 0.2 10 c 0.2 11 d 0.1 010 e 0.1 011 Tabela: Co´digo de Huffman 39 / 51 Compressa˜o de Dados Na˜o Unicidade do Co´digo de Huffman O co´digo anterior foi gerado colando sempre as letras combinadas o mais alto poss´ıvel na lista. O tamanho me´dio deste novo co´digo e´: l = 0.4 · 2 + 0.2 · 2 + 0.2 · 2 + 0.1 · 3 + 0.1 · 3 = 2.2 bits/s´ımbolo Ambos co´digos tem o mesma taxa Pore´m, o novo co´digo tem um variaˆncia menor. E´ comum que durante a transmissa˜o de arquivos se utiliza um buffer de tamanho fixo. Logo, o co´digo com a menor variaˆncia e´ melhor. 40 / 51 Compressa˜o de Dados Construc¸a˜o do Co´digo de Huffman Podemos Construir o co´digo de Huffman atrave´s de uma estrutura de a´rvore. A a´rvore de Huffman possui as seguintes propriedades: Cada no´ interno tem 2 filhos. As frequeˆncias menores esta˜o mais longe da raiz. As duas frequeˆncias menores sa˜o no´s irma˜os. O nu´mero de bits necessa´rios para codificar um arquivo e´ dado por: B(T ) := ∑ f(c) · dT (c) Onde: B(T ) e´ nu´mero de bits necessa´rio para codificar o arquivo usando a a´rvore T ; f(c) e´ frequeˆncia do caracter ‘c’; dT (c) e´ comprimento do co´digo para o caracter ‘c’; 0 0 0 01 1 1 1 b d e a c Letra Probabilidade Co´digo b 0.4 00 a 0.2 10 c 0.2 11 d 0.1 010 e 0.1 011 41 / 51 Compressa˜o de Dados Algoritmo 1 Construc¸a˜o da A´rvore e do Co´digo de Huffman 1: Compute a frequeˆncia relativa (fr) de cada valor no arquivo crie uma tabela valor vs frequeˆncia (a frequeˆncia relativa sera´ considerada como a probabilidade da letra) 2: Cada valor nesta tabela sera´ um no´ folha na a´rvore 3: while Restar No´s Desconexos do 4: Defina um no´ pai unindo dois no´s filhos, cuja soma das fr seja a menor poss´ıvel 5: Calcule a fr deste pai como a soma das fr dos seus filhos 6: Atribua o bit 1 para o primeiro filho e 0 para o segundo 7: end while 8: Obtenha o co´digo de cada valor pegando a sequeˆncia de bits atribu´ıda aos no´s, indo da raiz ate´ a folha que corresponde ao valor 9: Gere a tabela valor Vs co´digo 42 / 51 Compressa˜o de Dados Exemplo Suponha que o arquivo contenha os seguintes caracteres: “i am sammy”. i:1 s:1 y:1 a:2 m:3\b:2 Figura: Suba´rvores iniciais Unimos as duas suba´rvores de menor peso i:1 s:1 y:1 a:2 \b:2 m:3 2 Figura: Unia˜o das suba´rvores de menor peso 43 / 51 Compressa˜o de Dados i:1 s:1 y:1a:2 \b:2 m:3 2 3 Figura: Unia˜o das suba´rvores de menor peso 44 / 51 Compressa˜o de Dados i:1 s:1 y:1a:2 \b:2 m:3 2 3 4 Figura: Unia˜o das suba´rvores de menor peso i:1 s:1 y:1a:2 \b:2 m:3 2 3 4 6 Figura: Unia˜o das suba´rvores de menor peso 45 / 51 Compressa˜o de Dados i:1 s:1 y:1a:2 \b:2 m:3 2 3 4 6 10 0 0 0 0 0 1 1 1 1 Figura: A´rvore de Huffman Letra Frequeˆncia Co´digo m 3 11 a 2 01 \b 1 101 y 1 100 i 1 000 s 1 001 Tabela: Co´digo de Huffman 46 / 51 Compressa˜o de Dados Algoritmo 2 Comprimindo um arquivo 1: while ¬feof(arquivo ba´sico a ser compactado) do 2: Para cada byte lido, acesse a tabela valor Vs co´digo e recupere o co´digo dele 3: Transfira o co´digo para a sequeˆncia de bits de sa´ıda 4: Soma 1 ao contador de bytes codificados 5: Se o buffer de sa´ıda encheu grave-o no arquivo compactado de sa´ıda. 6: end while 7: Grave no cabec¸alho valor do contador de bytes codificados 8: Grave no cabec¸alho a tabela de frequeˆncia dos bytes ou a a´rvore gerada 9: Grave no cabec¸alho a tabela de valor Vs co´digo 10: Feche os arquivos Nota Na verdade so´ e´ necessa´rio mandar a tabela (valor Vs co´digo). Mandar a a´rvore facilita a implementac¸a˜o do algoritmo de decodificac¸a˜o pore´m ocupa mais espac¸o! 47 / 51 Compressa˜o de Dados Algoritmo 3 Descomprimindo um Arquivo 1: Leia o cabec¸alho do arquivo compactado 2: Defina o contador de bytes codificados 3: Defina a a´rvore de Huffman 4: while ¬feof(arquivo-compactado) ∧ Contador de bytes codificados > 0 do 5: Leia o arquivo compactado 6: Enquanto ha´ bits lidos 7: Va´ pegando os bits e percorrendo a a´rvore da raiz para as folhas, em func¸a˜o do valor dos bits encontrados. Quando chegar ao no´ folha voceˆ tem o valor (byte) correspondente ao co´digo 8: Transfira o byte para o arquivo descompactado 9: Decremente o contador de bytes codificados 10: end while 48 / 51 Compressa˜o de Dados Codificac¸a˜o Aritme´tica Os co´digos de Huffman sa˜o o´timos somente quando a probabilidade de ocorreˆncia das letras e´ poteˆncia de dois. Ale´m disso, quando existe uma letra com probabilidade maior que 0.5, o melhor que o co´digo de Huffman consegue e´ representar essa letra com um bit. A codificac¸a˜o aritme´tica e´ uma alterativa, a codificac¸a˜o de Huffman. A codificac¸a˜o aritme´tica converte uma sequeˆncia de s´ımbolos em um u´nico co´digo, tendo o potencial de chegar mais perto da entropia. Possui uma implementac¸a˜o mais dif´ıcil. Pesquisa Pesquise sobre codificac¸a˜o aritme´tica. 49 / 51 Compressa˜o de Dados Compressa˜o no Unix Oscomandos pack e unpack do Unix utilizam o Co´digo de Huffman. Atingem uma reduc¸a˜o de 25% a 40% em arquivos tipo texto. Entretanto, na˜o se obte´m resultados ta˜o bons em arquivos do tipo bina´rio, uma vez que estes possuem uma distribuic¸a˜o mais uniforme dos valores. 50 / 51 Pro´xima Aula Pro´xima Aula Organizando Arquivos para Desempenho (continuac¸a˜o). 51 / 51
Compartilhar