Ir ao conteúdo
  • Cadastre-se

Como funciona a compactaçao de ficheiros?


Cambalinho

Posts recomendados

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.

 

 

Link para o comentário
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)

 

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...