Ir ao conteúdo
  • Cadastre-se
Cambalinho

Como funciona a compactaçao de ficheiros?

Recommended Posts

como funciona a compactaçao de ficheiros?

(tipo zip ou rar)

nao entendo como fazer compactaçao. só sei que  ajuda a fazer 1 ficheiro com 1 ficheiro ou mais que ocupa menos espaço no disco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consiste basicamente em pegar algo como "AAAAAA" e transformar em "6A". Existem vários tipos de compressão, por exemplo em imagens, muitos pixels se repetem, dai você aplica algum algoritmo de algoritmos de compressão de dados.


Em RLE(algoritmo de compressão) imagine uma imagem que tem o fundo branco B e um testo preto P em cima, você poderia ter algo tipo: BBBBBBBBBBBBPBBBBBBBBBBBBPPPBBBBBBBBBBBBBBBBBBBBBBBBPBBBBBBBBBBBBBB

Isso em utilizando o RLE ficaria assim: 12B1N12B3N24B1N14B
interpretado como: 12 letras B + 1 letra P + 12 letras B + 3 letras P, etc.

Reduz de 67 caracteres a somente 18.
BBBBBBBBBBBB+P+BBBBBBBBBBBB+PPP+BBBBBBBBBBBBBBBBBBBBBBBB+P+BBBBBBBBBBBBBB+....
Acho que você deveria buscar por algoritmos de compressão de dados. Certamente você poderá até criar seu próprio algoritmo de compressão. Imagine que depois de reduzir algo como AAABBBCCCDDDHHHHH utilizando RLE, sabemos que as 4 seguintes letras todas repetem 3 vezes, e que na tabela asc2, b vem depois de a, c vem depois de b e d depois de c, existe um padrão que se repete, talvez em uma segunda passada você possa, depois de obter 3A3B3C3D5H com RLE na primeira passada, a algo como 3(ABCD)5H ou 3ABC5H se souber interpretar corretamente.
Entrada: AAABBBCCCDDDHHHHH

1ºrepassada: 3A3B3C3D5H
2ºrepassada: 3ABC5H

como vemos a efetividade compressão depende de alguns fatores como por exemplo algoritmo usado, numero de repetições de algo que aparece no arquivo, quanto mais vezes algo se repete maior será a compressão, numero de tratamentos que aplicamos(repassadas). Isso tudo explicando da forma mais simples possível pois não sou especialista em compressão nem muito menos, e como vemos não podemos diminuir um dado até 0, mas como vimos, dependendo do arquivo, até podemos chegar a uma razão de 50% ou até maior, e sempre podemos aplicar vários algoritmos conjuntamente.

você bem poderia provar com algum formato de imagem como BMP, ou melhor ainda NetPBM que é bem fácil de manipular.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok. voce falou no Dicionario da compressao. o meu problema, é entender mais o processo na pratica :(

temos 1 frase:

 

"ó pá mete a pá na pá"

ao olhar(olhar) e sei que tenho a palavra 'pá' repetida 3 vezes. ou seja essa palavra vai fazer parte do dicionario.

mas isto é vendo na teoria... como se faz na pratica para procurar palavras repetidas? se eu nao sei a palavra que é repetida como a posso verificar a sua existencia ou repetiçao?

(desculpa a confusao, mas preciso de entender mais 1 pouco)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpa, mas falando em codigo ou pseu-codigo, como posso fazer para verificar as palavras que se repetem?

eu consigo separar o texto e ter 1 array\vector de palavras. mas como faço para verificar se repetem? tenho de testar 1 a 1(com superior a 1 byte de comprimento)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que você poderia aplicar alguma função hash em cada palavra, assim você saberia sem precisar buscar nada, simplesmente você teria contadores o algo parecido.

 

O simplesmente fazer algo como:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main(){

    std::vector<string> v;
    v.push_back("ó" );
    v.push_back("pá" );
    v.push_back("mete" );
    v.push_back("a" );
    v.push_back("pá" );
    v.push_back("na" );
    v.push_back("pá" );
    
    
    string target = "pá";

    int items = std::count(v.begin(), v.end(), target);

    std::cout << "buscar: " << target << " count: " << items << '\n';

    
    
}


É só carregar a palavra na target que o programa te diz se tem mais de uma repetição.
 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao menos entendi a base.. excepto para ficheiros que nao sejam de texto é que complica mais. mas prontos. se mexer muito em ficheiros estruturados(sejam database ou musica ou imagens), podemos perder dados da estrutura e isso é mau

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×