Seite 1 von 1

Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:16
von Krishty
Hi,

Ich habe hier so eine Art Kompressionsalgorithmus, der beliebige Strings erwartet und dann in einen Pool schmeißt. Dabei werden die Strings auf eine Art und Weise sortiert, dass sie sich maximal überlappen; d.h., dass der Pool minimal groß wird.

Das ist ganz nützlich, wenn man eine Große Menge kurzer Datenfetzen optimieren, dabei aber auf Dekompressionsalgorithmen verzichten möchte. Aber leider ist es auch nicht effizient. Darum brauche ich jetzt einen Namen für das Problem oder den Algorithmus, nach dem ich suchen kann, um herauszufinden, wie sich das besser lösen lässt …

Gruß, Ky

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:24
von Jörg
Klingt fuer mich nach "String dictionaries"-Gegend.

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:35
von Krishty
So, wie ich das sehe, geht es dort vor allem um die Suchalgorithmen, um Strings im Verzeichnis zu finden … sowas habe ich garnicht. Mal ein Beispiel:

Die drei Wörter

hello
low
hell

sollen gepoolt werden. Die Ausgabe wäre dann:

hellow
(0, 5); (3, 3); (0, 4)

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:38
von antisteo
Dann würdest du Strings ja mit Start+Länge identifizieren.

ich würde das KA nennen... Krishty Algorithmus

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:41
von Krishty
Off Topic:
antisteo hat geschrieben:Dann würdest du Strings ja mit Start+Länge identifizieren.
Klar … Pascal-Strings (Zeiger auf Anfang + Länge) ftw. C-Strings sind einfach nur zum Kotzen; in fast jedem Anwendungsbereich nichts als ein riesiges Ärgernis.

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:56
von antisteo
Off Topic:
Krishty hat geschrieben:
antisteo hat geschrieben:Dann würdest du Strings ja mit Start+Länge identifizieren.
Klar … Pascal-Strings (Zeiger auf Anfang + Länge) ftw. C-Strings sind einfach nur zum Kotzen; in fast jedem Anwendungsbereich nichts als ein riesiges Ärgernis.
Pascal-Strings sind ein Zeiger auf das erste Zeichen des Strings, der mit 0 terminiert wird. Links vom ersten Zeichen sind dann noch Referenzzähler und Länge.

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 10:57
von Jörg
Ja, haste recht, im Woerterbuch sucht man nur.
Ansonsten klingt das von der Idee her wie ein Lempel-Ziv Abkoemmling. Sind denn alle Strings bekannt , bevor der Pool (optimal?) gebaut wird, oder laeuft das dynamisch, also kommen immer neue Strings dazu?

Ha und jetzt sehe ich, dass in beiden Kontexten (Woerterbuch-Suchbaum und Stringpool) in der Literatur das Wort Woerterbuch/Dictionary verwendet wird. Du brauchst halt ein kompaktes mit Index ;)

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 11:04
von Krishty
Der Pool ist statisch. Er ist nicht optimal (da würde das eh schon günstige Laufzeitverhalten nochmal explodieren) aber bis auf, sagen wir, ein Prozent dran.

Bei LZ wird afaik nicht zwischen Wörterbuch und Symbolliste getrennt, oder?
Jörg hat geschrieben:Ha und jetzt sehe ich, dass in beiden Kontexten (Woerterbuch-Suchbaum und Stringpool) in der Literatur das Wort Woerterbuch/Dictionary verwendet wird. Du brauchst halt ein kompaktes mit Index ;)
Also doch Dictionaries? Na, dann mal auf in die Fluten …

OT:
Urks; stimmt. Sagen wir, Pascal-ish Strings :)

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 11:10
von dot

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 11:13
von Jörg
LZ wuerde einem String aber nicht nur ein Paar (Index+Laenge zuweisen), sondern ihn in mehrere Teile splitten...was macht dein Code, wenn Du einen sich selbst wiederholenden String "FooBlaFooBla" verwendest? Volle Laenge abspeichern?

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 11:18
von Krishty
Volle Länge, genau. Allerdings kannst du das mit dem Splitten ja auch anders sehen – indem du in LZ Strings statt Buchstaben als Symbole nimmst, und dann im Sub-Symbol-Bereich nach Redundanz suchst … oder so ähnlich :D

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 13:54
von Jörg
Mir faellt eben ein, dass man natuerlich auch im Suchbaum indiziert auf Strings zugreiffen kann...einfach den Blatt-Index nehmen. ja, der String ist dann ru eckwaerts...aber was soll's .

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 03.12.2011, 17:29
von BeRsErKeR

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 04.12.2011, 00:34
von Eisflamme
Kommt der hier nicht recht nah dran? http://de.wikipedia.org/wiki/LZ78

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 04.12.2011, 10:54
von kaiserludi
Krishty hat geschrieben:Aber leider ist es auch nicht ineffizient.
Wieso leider?

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 04.12.2011, 11:30
von Krishty
kaiserludi hat geschrieben:
Krishty hat geschrieben:Aber leider ist es auch nicht ineffizient.
Wieso leider?
Vertippt. Habe ich zuerst selbst im Zitat nicht erkannt m[ Dankeschön!

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 04.12.2011, 21:31
von Jörg
Noch eine Frgae dazu...in einem mit Objektnamen arbeitendem Umfeld (lass es einen Szenengraphen sein) ist es ja nicht ungewoehnlich, auf aussagekraeftige Bezeichner wie "Baum1" bis "BaumXXXX" zu treffen. Darunter leidet Dein Pool doch arg, was waere/ist denn das Einsatzgebiet?

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 04.12.2011, 22:31
von BeRsErKeR
Eisflamme hat geschrieben:Kommt der hier nicht recht nah dran? http://de.wikipedia.org/wiki/LZ78
Ich glaube Krishty wollte auf Dekodierung/Dekompression verzichten.

@Krishty: Schonmal die PATRICIA Tries angeguckt?

Re: Brauche den Namen dieses Algorithmusses

Verfasst: 05.12.2011, 05:56
von Krishty
BeRsErKeR hat geschrieben:Ich glaube Krishty wollte auf Dekodierung/Dekompression verzichten.
Ganz genau – es ist essentiell, dass man zur Laufzeit nicht merkt, dass eine Kompression zugange war.
Jörg hat geschrieben:Noch eine Frgae dazu...in einem mit Objektnamen arbeitendem Umfeld (lass es einen Szenengraphen sein) ist es ja nicht ungewoehnlich, auf aussagekraeftige Bezeichner wie "Baum1" bis "BaumXXXX" zu treffen. Darunter leidet Dein Pool doch arg, was waere/ist denn das Einsatzgebiet?
Ursprünglich habe ich ihn für meinen Compiler entworfen, weil ich unzufrieden mit der Art und Weise bin, wie Visual C++ Strings poolt und Daten zusammenfasst (bspw. werden die Strings "bar" und "bar" im Datensegment zusammengefasst, nicht aber "bar" und "foobar").

Im Augenblick ist er in einem System im Einsatz, das automatisiert Funksprüche zusammensetzt (Berlin | tower, this is | Shark | – request vector for recovery). Die komprimierten Texte brauchen 30 % weniger Platz; 45 MiB PCM-Audiodaten werden durch Entfall redundanter Fetzen und optimales Überlappen der Pausen an Anfang und Ende immerhin noch 6 % kleiner (nur leider bei einer Laufzeit von mehreren Stunden).

@BeRsErKeR: Danke; schaue ich mir an, sobald ich mit den anderen Links durch bin.