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?
0
  1. Nie zapisujesz drzewa do pliku, tylko słowa kodowe wyznaczone za pomocą tego drzewa.

Pozdrawiam

0
string temp;
getline(cin, temp); 

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

0
Kozi12 napisał(a):
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ść.
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1