Pschhhhht, man postet doch nicht sein bestes Pferd vor dem Rennen
Bei der Länge von 3600 tippe ich mal auf einen statischen Huffman encoder, da kommen bei mir ähnliche Werte raus
PS: Da geht aber noch was... Benutze deine Fantasie
(auch wenn es verlockend ist, Algorithmen zu nutzen die weit verbreitet und erprobt sind. Wir sind hier ein Forschungsteam, wir brauchen den neuen Stuff )
Meine Aktuelle Idee ist (auch wenn sie leider viel viel viel zu langsam läuft):
- Adaptiver Huffman Encoder (soweit so gut)
- Der Tree startet gleichverteilt und wird nach jedem Zeichen aktualisiert (dann braucht man den Tree nicht in den Komprimierten Daten speichern)
- Der Tree wird außerdem mit Prognosen gefüttert und aktualisiert BEVOR er überhaupt das nächste Zeichen zu Gesicht bekommt. Damit ist die Kodierung noch besser, weil im Schnitt bessere Bitraten für zu kodierende Zeichen vorliegen, wenn die Prognosen korrekt waren (was bei einfachem Text zu 90%+ der Fall ist)
Probleme:
- Tree initialisierung ist Gleichverteilt (das ist ja gerade der Trick, damit man ihn nicht speichern muss), Presets könnte man aber erstellen (Häufigkeiten der Zeichen von "allem möglichen" wie "Text", "Win32PE", "Base64", etc. Diese Presets könnte man dann bequem mit z.B. einem einzigen Byte anwählen und hätte damit vorallem zu Beginn eine bessere Kompression... Diese Presets erstellen ist aber sehr aufwendig und dafür habe ich keine Kraft)
- Tree aktualisieren ist langsam
- Prognosen erstellen ist noch viel langsamer (dafür muss man eine halbwegs gute Auswertung von allem bisher Dekodiertem durchführen...)
Wenn man das alles macht schätze ich, dass locker 50%+ drin sind. Aber das werde ich nicht hinbekommen, weil es zu viel Arbeit ist. Vllt hat ja jemand Lust die Idee umzusetzen^^