Algorytm LZ77

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Bartosz1166
Piegowaty Guziec
Piegowaty Guziec
Posty: 17
Rejestracja: 30 paź 2011, 11:50
Płeć: Mężczyzna
Wersja Ubuntu: 13.04
Architektura: x86_64
Kontakt:

Algorytm LZ77

Post autor: Bartosz1166 »

Witam. Napisałem program do kompresji metodą LZ77 ale nawet dla przykładu z wikipedii daje złe wyniki. Czy kotś wie , co może byćnie tak?

Kod: Zaznacz cały

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

int main(){
string slowo;
cout << "Podaj swoje slowo: ";
cin >> slowo;
int rozmiar_slownika, rozmiar_wejscia;
cout << "Podaj rozmiar slownika: ";
cin >> rozmiar_slownika;
cout << "Podaj rozmiar bufora wejsciowego: ";
cin >> rozmiar_wejscia;
string cala_linia;
char x;
for(int i=0; i<rozmiar_slownika; i++) cala_linia += slowo[0];
cala_linia += slowo;
cala_linia += "~";
string wyjscie = "";
wyjscie += slowo[0];
do{
    string prefix = cala_linia.substr(rozmiar_slownika, rozmiar_wejscia-1);
    string slownik = cala_linia.substr(0, rozmiar_slownika);
    int a = -1, b = 0;
    while(prefix.size() >= 0){
    a = slownik.find(prefix);
    b = prefix.size();
    x = cala_linia[rozmiar_slownika+b];
    if(a != -1) break;
    prefix = prefix.substr(0, prefix.size()-1);
    }
    for(int i = 0; i < cala_linia.size()-1; i++)cout << "|" << cala_linia[i];
    cout << endl;
    if(a == -1) cout << "Wyjscie kodera: "<< "(" << 0 <<","<< 0 <<","<< x <<")" << endl;
    else if(x!='~') cout << "Wyjscie kodera: "<< wyjscie << "(" << a << "," << b << "," << x <<")" << endl;
    else cout << "Wyjscie kodera: "<< wyjscie << "(" << a << "," << b << ",NULL)" << endl;
    b++;
    int c = cala_linia.size();
    cala_linia = cala_linia.substr(b, c-b);
    wyjscie = "";
    cout << endl;
    a=-1;
    b=0;
}
    while(x != '~');
cout << endl;
system("PAUSE");
}
Awatar użytkownika
enedil
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1352
Rejestracja: 08 wrz 2012, 16:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: i3
Architektura: x86_64
Kontakt:

Re: Algorytm LZ77

Post autor: enedil »

Jeżeli chcesz pomocy, to dodaj komentarze do kodu. Twój algorytm jest nieczytelny.
A z tym system("PAUSE"), to dowaliłeś. Tego się używa tylko w Windowsie, tylko w słabych IDE.
Dobrze jest, psiakrew, a kto powie, że nie, to go w mordę!

~moderatorzy
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Amazon [Bot] i 6 gości