kompresja metodą Huffmana

kompresja metodą Huffmana
0

Muszę napisać program do kompresji (i dekompresji) danych metodą Huffmana i potrzebuję merytorycznej pomocy w kilku kwestiach.

  1. Jak wczytać tekst znak po znaku, ale łącznie ze znakami białymi.
  2. Jak zapisać drzewo do pliku. Mógłbym zapisać listę liter i ich reprezentacji bitowych, na końcu pliku oddzielonych od reszty. Kiedy spotka pierwszą literę, ma wiedzieć, że to jest tłumaczenie, Ale czy to nie jest marnowanie miejsca? To w końcu kompresja. Nie da się tego zrobić inaczej?
MI
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:4
0
  1. Nie zapisujesz drzewa do pliku, tylko słowa kodowe wyznaczone za pomocą tego drzewa.

Pozdrawiam

K1
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:6
0
Kopiuj
string temp;
getline(cin, temp); 

tak próbuj :)
http://www.cplusplus.com/reference/string/string/getline/

edytowany 1x, ostatnio: Kozi12
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:18 minut
0
Kozi12 napisał(a):
Kopiuj
string temp;
getline(cin, temp); 

tak próbuj :)
http://www.cplusplus.com/reference/string/string/getline/

Beznadziejna porada. getline nie nadaje się do wczytywania z plików binarnych.

Do wczytywania znak po znaku można użyć np fgetc albo fread, względnie odpowiedników z biblioteki C++.

  1. Możesz skorzystać z postaci kanonicznej drzewa Huffmana: https://en.wikipedia.org/wiki/Canonical_Huffman_code
    Wtedy dla każdego symbolu z alfabetu zapisujesz jedynie jego długość.

"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
JE
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:32
0

Kiedyś napisałem coś takiego na szybko. Nie wiem jak z jakością kodu, ale może pomoże.
https://gist.github.com/jerylee/97b8b41167f2f2e2b5fb

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.