Autor Beitrag
RamiroCruzo
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 04.01.17 19:21 
Hallo

Ich habe Huffman-Codes und length für eine komprimierte Datei. Ich möchte es decodieren und kodieren es zurück.

Problem ist, dass ich neu in Huffman bin und bin nicht in der Lage, es umzusetzen.

Jedermann haben Lösung?

ausblenden Quelltext
1:
2:
3:
HuffmanCodes = { 0x00, 0x02, 0x01, 0x05, 0x03, 0x07, 0x27, 0x17, 0x37, 0x0F, 0x2F, 0x6F, 0x1F, 0x5F, 0x3F, 0x7F };

HuffmanLengths = { 2, 2, 3, 3, 3, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 };
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 05.01.17 00:21 
Könntest Du die Frage bitte präzisieren? Ich verstehe das Problem nicht.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Fr 06.01.17 22:45 
vielleicht hilft dies weiter:

www.iti.fh-flensburg.../huffman/huffman.htm

Ansonsten gab es in der Zeitschrift c/t 1991 einen guten Artikel hierzu (Titel war glaube ich "imploding, freezing, done"), der noch im Online-Shop vorhanden ist.
RamiroCruzo Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 07.01.17 04:38 
Ich versuchte es zu tun, aber alle Guides sind auf Decodierung mit Huffman-Tabelle :(
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 07.01.17 12:23 
Moin!

Your German sounds like a non-native speaker. ;) If you like to speak english because it's easier for you, your're welcome. Most of our community members do understand it, too. :nixweiss:

Ich mach hier aber trotzdem nochmal in Deutsch weiter. ;)

Die beiden "Listen" aus deinem Eingangsposting lassen sich doch durchaus als "Tabelle" auffassen: die erste sind die Bitmuster, die zweite die Bitlänge. :idea: In meiner Erinnerung funktioniert Huffman doch genau so. :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 07.01.17 12:43 
Zitat:
Die beiden "Listen" aus deinem Eingangsposting lassen sich doch durchaus als "Tabelle" auffassen: die erste sind die Bitmuster, die zweite die Bitlänge. :idea: In meiner Erinnerung funktioniert Huffman doch genau so. :?

Ja aber aus den gezeigten Angaben bekommen wir nur die eindeutigen Codewörter. Aber auf welche unkodierten Codewörter mappen die? Das kann ich aus diesen beiden Arrays nicht erkennen.

Es kann natürlich irgendwie im Format versteckt sein. Aka die Position im Array entspricht dem ursprünglichen unkodierten Wort. Eine spekulative Lösung wäre man hat 4bit Wörter kodiert. Die Array sind ja 16 Einträge lang. Und man könnte dann einfach Annehmen das der erste Eintrag dann 0b0000 entspricht und der letzte 0b1111.

Dann hätte man das Mapping

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
unkodiert       kodiert
0b0000          0b00 (0x00)
0b0001          0b10 (0x02)
.....            
0b1000          0b111111 (0x37)
.....
0b1111          0b1111111 (0x7F)


Die Längen der Codewörter sehen dafür aber zu sortiert aus damit das wirklich so gedacht ist (kann natürlich auch Zufall sein). Ich gehe mal davon aus das uns noch irgendeine Info fehlt.

PS Mapping nochmal überarbeitet, Habe zwar selbst von 4bit Wörtern gesprochen konnte mich aber gedanklich offensichtlich nicht von Bytes trennen :(