Utilizando Latex

Olá,

Durante bastante tempo fiz a criação de trabalhos, nos editores de texto Microsoft Office e posteriormente no OpenOffice, mas recentemente descobri uma linguagem de marcação capaz de gerar arquivos tão belos quanto os que já fiz no OpenOffice, como comecei a pouco tempo ainda não vou postar nada sobre, mas tentarei criar um tutorial para a criação de trabalhos inteiros utilizando o Latex.

Para aqueles que pensam em iniciar sua caminhada pelo Latex, venho utilizando uma suite bastante interessante, o ShareLatex,  o mais interessante dele é você poder utilizar e compilar tudo sem grandes problemas, e o melhor tudo direto de seu navegador.

Espero trazer bastante conteúdo sobre, em meu Github já venho postando algo sobre, caso queira ver basta acessar =D

Obrigado e até mais.

Advertisements

Compressão sem perda

 

Olá, durante meus estudos acabei criando este artigo sobre as formas de compressão sem perda, tentei colocar todo o conteúdo de uma forma simples de entender, espero que gostem =D

Caso ache erros basta me avisar, Ok ? Valeu !!!

1. Introdução

 

Hoje se percebe que cada vez mais muitos dispositivos estão se conectado, recebendo e enviando os mais diversos tipos de informação. Por isso se faz necessário realizar a compressão dos dados que trafegam por todas estas plataformas.

 

A compressão começa com uma simples característica da informação, a entropia, esta que é referente as grandezas dos dados presentes na informação. Então a compressão de dados consiste em remover os bits que estão presentes no arquivo que estão acima do que a entropia diz necessário.

2. Formas de compressão

 

Existem duas principais maneiras de compressão de dados, com perda e sem perda, que será tratada aqui, veja:

 

2.1. Sem perdas

 

Este tipo de compressão, faz com que o arquivo seja comprimido, mas a qualquer momento pode voltar a seu estado original sem perda de informações. Esta é bastante utilizada em sistemas onde a disponibilidade é crítica, como sistemas médicos e de pesquisas, onde cada informação, por mínima que seja , é muito importante.


A compressão sem perda se divide em duas categorias, a universal ou dicionário:

  • Métodos universal ou dicionário:
    • Geram um arquivo comprimido contendo códigos de comprimento fixo, normalmente, com 12 a 16 bits;

 

  • Métodos estáticos:
    • Geram códigos contendo tamanhos variáveis;
    • Todas as palavras-códigos que tenham um maior número de frequência são substituídas por palavras-códigos menores.

 

Veja alguns algoritmos que realizam a compressão sem perda e suas características:

 

2.1.1. Algoritmo de Huffman

 

O algoritmo de huffman utiliza um sistema de substituição, onde faz a análise do fluxo de entrada e gera um fluxo de bits comprimido, este geralmente acaba sendo menor que o original.

 

A análise do fluxo de bits acontece de 8 em 8 bits. Assim tudo é transformado em uma cadeia de bits, veja:

 

Abracadabra! = 011111110011001000111111100101

 

Perceba que cada letra é convertida em uma pequena cadeia de números, estes que representam seu código. Para que se tenha um melhor entendimento basta pensar em algo mais simples, como a estrutura dos códigos de barra, onde o código representa um produto para o sistema de cobrança. Funciona desta maneira, isto facilita a identificação do elemento, além de utilizar menos tempo e recurso para realizar a comparação.

 

Entenda que este algoritmo foi escrito com uma ideia simples, substituir elementos que estão sendo exibidos muitas vezes, por pequenos fluxos de bits que fará a representação de todos estes que se repetem.

 

2.1.1.1. Tabela de códigos

 

A tabela de código é o segredo do algoritmo de Huffman , pois esta deve ser bem escolhida para cada caso, isto porque ela se divide de duas formas, com comprimento fixo ou com comprimento variável. Esta tabela funciona de maneira relacional onde um caractere se refere a um código, e tudo isto é armazenado em um vetor de 256 caracteres ASCII, veja o exemplo:

 

!  001                 !  1010
A  010                 A  0
B  011                 B  111
C  100                 C  1011
D  101                 D  100
R  110                 R  110
…                    …

Outro fato que é interessante se atentar é a forma forma de descompressão, isto porque a tabela deve ser livre de prefixos para que ela realize a descompressão correta.

 

2.1.1.2. Tabela de código inverso

 

Esta trabalha de maneira bem semelhante a mostrada anteriormente, porém aqui a chave para referenciar um caractere, não é mas ele próprio e sim os números que o formam, veja:

 

101   !
0     A
1111  B
110   C
100   D
1110  R

2.1.1.3. Árvores de Huffman

 

Aqui está uma importante forma do algoritmo de Huffman, isto porque este método separa os prefixos e a quantidade de vezes que este é exibido, para que se entenda é necessário uma visualização completa de toda uma estrutura, como a seguir:

huffabratwo

Árvore de Huffman,2016.

 

Perceba que os caminhos onde cada uma das chaves está presente, forma seu valor, esta maneira de representação facilita no entendimento de como toda aquela estrutura está montada, bem como ela está sendo feita.

 

2.1.2. Codificação Aritmética

 

Este método utiliza da entropia, que realiza os tamanhos máximos dos dados, e assim a codificação aritmética consegue realizar o cálculo de médias de símbolos para a exibição de uma fonte.

 

A forma com que a codificação aritmética trabalha elimina as tabelas de relação, o que permite igualar a entropia dos elementos em todos os casos.

 

Esta faz a análise de toda a entrada de fluxo de bits, e transforma tudo em uma única informação. Foi citado acima que este método calcula a média dos elementos, isto significa a probabilidade de cada um destes elementos aparecer durante o processo de análise do fluxo de entrada, e toda estas probabilidades devem ser listadas em um alfabeto de probabilidades, isto faz com que este se torne um algoritmo mais complicado de lidar do que o anterior, exatamente por esta sua característica, onde deve ser tratado as informações de probabilidade.

Com isto é possível visualizar a maneira com que o algoritmo trabalha, onde em seu início é feito todo o processamento das informações e suas médias, a partir do último elemento calculado, é feito o cálculo da média que irá gerar o código aritmético calculado no intervalo do início ao fim do cálculo de fluxo.

Em sua descodificação ele utiliza uma maneira bem simples, utilizando o código binário gerado anteriormente, e como já dito no início foi atribuído a cada símbolo um valor no alfabeto das probabilidades, ele utiliza o código binário e sua totalidade para ir realizando comparações e montando toda a estrutura novamente.

 

Conclusão

 

Por fim é possível perceber que as formas de compressão exigem uma forma estruturada de se pensar para a realização da compressão, e além disto cada uma pode ser adaptada para um tipo de caso, e servindo para qualquer tipo de arquivo.

 

Referências Bibliográficas

 

PESSOA, Universidade Fernando. Codificação Aritmética. Disponível em: <http://multimedia.ufp.pt/codecs/compressao-sem-perdas/codificacao-estatistica/codificacao-aritmetica/&gt;. Acesso em: 23 set. 2016.

TEIXEIRA, Marcelo; QUEIROZ, Adelar da Silva; SODRÉ, Thiago da Silva. Compressão sem perda: Codificação Huffman e Aritmética. Disponível em: <http://www.inf.unioeste.br/~adair/PID/Notas Aula/Codificacoes Huffman e Aritmetica.pdf>. Acesso em: 24 set. 2016.

USP, Ime. Algoritmo de Huffman para compressão de dados. Disponível em: <http://www.ime.usp.br/~pf/estruturas-de-dados/aulas/huffman.html&gt;. Acesso em: 24 set. 2016.

DIAS, Anderson Zanardo; BATTISTI, Anselmo Luiz Éden; VASATA, Darlon. Compressão sem Perda: Códigos de Huffman & Codificação Aritmética. Disponível em: <http://www.inf.unioeste.br/~adair/PID/Notas Aula/Compressao Sem Perdas – Huffman e Aritmetica.pdf>. Acesso em: 24 set. 2016.