Roman Pfarrhofer: Einfacher Kompressionsalgorythmus gesucht

Hi Leute!

Also mir schwebt da so eine JavaScript-Anwendung vor, deren Sinn ich hier noch nicht ganz offenlegen will. Aber keien Angst, daß Ergebnis werde ich hier presentieren. Vielleicht sogar als Feature-Artikel, damit Stefan wieder was zum Einbinden hat ;-)

Was ich dafür brauch ist einen verlustfreies Kompressionsverfahren, was sich besonders bei der Dekompression durch Schnelligkeit und wenig Ansprüche auszeichnet - für eine JavaScript-Umsetzung halt. Dafür nehme ich auch einen eher geringen Kompressionsgrad gerne in kauf.

Mit sowas wie indizes, base63 (<hand style="wink:Roland, ThomasM;"/>) und vordefinierten zusammenfassungen kann ich leider nicht arbeiten, da mir keine klar definierte Datenstruktur zugrunde liegen. Mögliche Zeichen sind der komplette ASCII-Satz.

Leider kann ich mir noch nicht befriedigend selbst behelfen (Vorlesung Kompressionsverfahren habe ich erst in 3 Semstern ;-) - also wer hat Links zu einführender Literatur oder/und kann mir ein bestimmtes Kompressionverfahren nahelegen.

Ich bin aber enttäuscht wenn mir hier irgendwer ein kompressionsverfahren in JavaScript hereinpostet - der würde mir die ganze Freude an der Arbeit nehmen. Aber andere Programmiersprachen können es ruhig sein, muß ja nicht das Rad neu erfinden.

Danke,
CU Roman

  1. ...
    ich glaube alleine mit JavaScript kannst Du nicht viel erreichen, schau dir doch PHP an, dort gibt es fertige Kompremieralgorithmen (easy to use), also ersparst du dir das einlesen, und die funktionieren noch dazu 100%

    -> www.php3.com

    mfG webmonk

    1. Hi!

      ich glaube alleine mit JavaScript kannst Du nicht viel erreichen,

      nur weil du es nicht kannst?

      »»  schau dir doch PHP an, dort gibt es fertige Kompremieralgorithmen (easy to use), also ersparst du dir das einlesen, und die funktionieren noch dazu 100%

      nein nach dem habe ich nicht gefragt. aber ich will was neues machen - einerseits liegts am challenge und lernen und anderseits hat sowas IMHO noch keiner gemacht

      CU Roman

  2. Hallo Roman,

    Was ich dafür brauch ist einen verlustfreies Kompressionsverfahren, was sich besonders bei der Dekompression durch Schnelligkeit und wenig Ansprüche auszeichnet - für eine JavaScript-Umsetzung halt.

    Wenn Du Daten verlustfrei komprimieren willst, dann mußt Du irgendwas über die Eigenschaften dieser Daten wissen.
    Alle Komprimierungsverfahren tun das. Sie setzen beispielsweise auf Eigenschaften wie

    • eine Ungleichverteilung der Häufigkeit der einzelnen Zeichen (Huffman-Code) oder
    • eine Ungleichverteilung der Häufigkeit von Zeichenfolgen (run length encoding)
      und codieren dabei häufig auftretende Einheiten durch kürzer darstellbare Codes.

    Beim Self-Browser-Lieferanten werden für verschiedene Datenarten sogar unterschiedliche Komprimierungen verwendet:

    • Lange, sich oft wiederholenden Zeichenfolgen (Verfasser, Thema, Titel, Datum) werden über eine Strings-Tabelle dargestellt (also nur einmal gespeichert und an vielen Stellen über Indizes auf diese Tabelle referenziert)
    • die (sehr individuelle) Uhrzeit wird aufgrund immanenter Redundanz (nur bestimmte ASCII-Zeichen sind zulässig) numerisch codiert und in eine kürzere Zeichenkette gepreßt.

    Dafür nehme ich auch einen eher geringen Kompressionsgrad gerne in kauf.

    Solange keine Eigenschaft Deiner Daten bekannt ist, kannst Du nicht mal eine minimale Komprimierungswirkung garantieren.

    Mit sowas wie indizes, base63 (<hand style="wink:Roland, ThomasM;"/>) und vordefinierten zusammenfassungen kann ich leider nicht arbeiten, da mir keine klar definierte Datenstruktur zugrunde liegen. Mögliche Zeichen sind der komplette ASCII-Satz.

    Das ist wenig. Hast Du denn nicht einmal irgendwelche statistischen Aussagen über Deine Daten?

    wer hat Links zu einführender Literatur oder/und kann mir ein bestimmtes Kompressionverfahren nahelegen.

    Es hängt einfach zu sehr von Deinen Daten ab, um Dir etwas konkret zu empfehlen. Wirklich effiziente Komprimierungen (z. B. ZIP) sind letztlich eine Kombination aus allen möglichen Methoden, aber welche von diesen alleine (Du willst ja eine einfache Methode haben) in Deinem Fall etwas taugt, dafür müßte ich Deine Daten sehen.
    Auf jeden Fall wird es eine ziemliche Bit-Pfriemelei, wenn Du wirklich Zeichen (8 Bit) komprimieren willst. Das geht mit JavaScript durchaus (Bits shiften).

    Gleich der erste Suchmaschinentreffer http://www.iti.fh-flensburg.de/lang/algorithmen/code/huffman/huffman.htm hat mir beim Überfliegen recht gut gefallen. Lies Dir die Seite mal durch - es sieht auf den ersten Blick komplizierter aus, als es ist. (Listen mit JavaScript-Arrays zu simulieren kriegst Du hin, ja?)

    mfG - Michael