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.

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.

 

Resolvendo | Ciclos Matemáticos | 1° Parte

Olá,

Bom hoje vou resolver os primeiros exercícios do ciclos matemáticos. Mas aqui não vou colocar apenas as respostas, vou colocar também o que pensei quando resolvi cada um dos exercícios. Lembrando que são poucos, e com o tempo vou colocando mais, espero que goste =D

Capítulo zero: (Não estão em ordem, vou postar de acordo com o que vou fazendo)

Problema 1: Diversas bactérias estão colocadas em um vidro. Um segundo depois cada bactéria se divide em duas, no próximo segundo todas as bactérias se dividem novamente em duas, e sua por diante. Depois de um minuto, o vidro está cheio. Quando o vidro estava pela metade?

Bom neste exercício tentei primeiro fazer a multiplicação das bactérias para que eu tivesse a noção do quando era seu crescimento, mas logo percebi que calcular segundo a segundo levaria muito tempo, então voltei a ler o exercício, e assim fiquei por um tempo, até perceber que o pote estava na metade aos 59 segundos, isto porque o crescimento das bactérias é dobrado a cada segundo, sendo assim se em um  minuto o pote está cheio, isso significa que no segundo anterior ele estava na metade.

Problema 2: Ana, João e Alex fizeram uma excursão de ônibus pela Disneilândia. Cada um deles tem que pagar pelo passeio com moedas de plástico com valor 5, mas eles só tem moedas com valores 10, 15 e 20 (cada um tem uma quantidade ilimitada de cada um desses tipos de moeda). Como eles podem pagar pela excursão?

Aqui segui apenas a recomendação dos exercícios de contagem, me coloquei no lugar de quem estava realizando a ação, então cheguei a seguinte conclusão, um deles paga para todos, o que totaliza 15 moedas.

Problema 9: Pedro disse: “Anteontem eu tinha 10 anos, mas vou fazer 13 anos no ano que vem”. Isto é possível ?

Sim, é possível, pois ele fez esta afirmativa no dia 30 de dezembro, e seu aniversário foi no dia 31 de dezembro logo o dia em que ele está é o 1° de janeiro do ano seguinte, no caso o ano que ele fara 12 anos, e no próximo ano ele fará 13. Aqui também me coloquei no lugar de quem estava fazendo a afirmativa e não teve muitos segredos para ser realizado.

Problema 10: A gata de pedrinho sempre espirra antes de uma chuva. Ela espirrou hoje, Pedrinho pensou: “Isto significa que vai chover”. Ele está certo ?

Bom neste tive certa dificuldade, pois mesmo pensando como se fosse Pedrinho, a resposta sempre acabava sendo a correta ( Confesso que olhei no gabarito se está erra a reposta). Mas então com a ajuda de alguns amigos chegamos a conclusão que não, isto porque a gata espirrar toda vez antes de uma chuva, não significa que toda vez que ela espirrar irá chover.

 

Sei que foram poucos exercícios, mas vou postando de acordo com o que estou fazendo, caso ache que alguma resposta está errada ou incompleta, basta avisar. E eu fazendo mais exercícios, vou realizando mais post sobre o tema. Obrigado =D

TuxSmash | Primeiro jogo com AppInventor

Bom venho utilizando o AppInventor tem algumas semanas, e a cada dia que utilizo vejo que ele permite a criação de muitos aplicativos, e o melhor, qualquer um com boa vontade pode começar a usar e criar seus próprios aplicativos. Pensando nisso hoje começei a criar um jogo com a ferramenta, e o resultado acabou me agradando. Veja o programa tem bastante a melhorar, pois começei a usar a ferramenta tem pouco tempo. Então qualquer melhoria é bem vinda.

Caso queira visualisar meu simples jogo, basta clicar aqui

Espero que gostem, até mais =D

Começando

Olá, bem estou iniciando este projeto pois gosto bastante de compartilhar o que aprendendo, além de que quanto mais ensinamos mais aprendemos. Assim criei este blog para compartilhar o que aprendo em meu dia-a-dia. Vale lembrar que o foco deste blog é matemática e programação, mas caso surjam mais colaboradores o conteúdo irá se estender.

 

Obrigado e logo menos começarei a colocar conteúdo =D

Até mais…