Ich suche eine mathematische Komprimierungslösung für folgendes Problem:
Ich habe jeweils zwei zusammengehörige Paare:
Wert Eins: 0 bis 255
Wert Zwei: 0 bis 255
Beispiel(Wert Eins, Wert Zwei, Wert Eins,...)
[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0,
0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170
,106,39,0,0,104,39,0,0,101,26,0,0,104,39]
Ziel ist nun, diese Informationen möglichst platzsparend in eine Reihe
von 8Bit-Zahlen zu komprimieren und wieder zu dekomprimieren.
Welcher Algorithmus - in Basic bestenfalls - erreicht dies?
Bei Unklarheiten nachfragen.
Das kann man nur sinnvoll komprimieren wenn diese Zahlenfolge
Besonderheiten hat, die man ausnutzen kann, für eine x-beliebige Folge
gibt es keine Kompression von der man sagen kann dass sie immer hilft.
in deinem Bsp sind z.b. Nullen recht häufig --> ist das immer so?
Hallo Das Array,
der Trick bei eigentlich allen Komprimierungen ist, dass man nicht
speichern muss, was man vorher schon weiß. Was kannst du über deine
Daten sagen? Kommen bestimmte Werte/Kombinationen häufiger vor, sind die
Änderungen zwischen zwei Wertepaaren häufig nur klein oder sie
wiederholen sich sogar öfters? Davon hängt dann der Algorithmus ab.
Gruß, DetlevT
Martin: Meinst du den verfügbaren Speicherplatz oder die Anzahl der zu
speichernden Paare?
abraxas, Detlev T.: Ja, Nullen sind recht häufig. Überhaupt ist das
Beispiel symptomatisch für alle anderen. Im Grunde sind Wert Eins und
Wert Zwei nicht alle Zahlen zwischen 0 und 255 sondern nehmen alle
diskrete Zustände an. Und zwar diese bei Wert Eins:
1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 -
74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 -
104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 -
117 - 118 - 121 - 123 - 120
Ein ähnliches Muster bei Wert Zwei.
Das Array schrieb:> diskrete Zustände an. Und zwar diese bei Wert Eins:>> 1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 -> 74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 -> 104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 -> 117 - 118 - 121 - 123 - 120>> Ein ähnliches Muster bei Wert Zwei.
Sind immer noch zuviele.
Wenn du jedes aus 1 mit jedem aus 2 kombinieren kannst, gibt es mehr als
256 verschiedene Kombinationen.
Egal wie du es drehst und wendest, du hast nicht mehr als 256
unterscheidbare Zustände in einem Byte.
Wenn du da überhaupt etwas kompremieren kannst, dann musst du an der
zeitlichen Entwicklung der zu übertragenden Reihe ansetzen. Denk aber
daran: Wenn du nur Differenzen hast, hängt alles davon ab, das keine
Differenz verloren geht.
Das Array schrieb:> Dann muß eben ein anderer Weg gegangen werden.
Ja.
Das geht aber nur, wenn man weiß wo die Zahlen herkommen; welche
Charakteristika es gibt; was man ausnutzen kann.
Mit beliebigen Zahlenfolgen von denen man nichts weiß, kann man kaum
etwas machen.
Das Array schrieb:> Im Grunde sind Wert Eins und> Wert Zwei nicht alle Zahlen zwischen 0 und 255 sondern nehmen alle> diskrete Zustände an. Und zwar diese bei Wert Eins:>> 1 - 7 - 14 - 21 - 27 - 33 - 37 - 43 - 47 - 52 - 56 - 60 - 64 - 68 - 71 -> 74 - 77 - 83 - 80 - 85 - 88 - 90 - 92 - 94 - 96 - 97 - 99 - 101 - 103 -> 104 - 105 - 106 - 108 - 109 - 110 - 111 - 113 - 112 - 114 - 115 - 116 -> 117 - 118 - 121 - 123 - 120
das sind ja nur 46 zustände, also braucht man dafür nur 6bit. Damit
hätte man schon 25% gespart.
Wie viele Kombinationen von wert1:wert2 gibt es?
Alle Kombinationen sind möglich. Aber die gewöhnliche Verteilung ist
[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0,
0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170
,106,39,0,0,104,39,0,0,101,26,0,0,104,39]
PS: Jeweils 0 zufügen
kannst du nicht etwas mehr zu den Werten sagen? Um was geht es dabei?
Eventuell gibt es ja noch andere zusammenhänge. Muss das ganze
verlustfrei Komprimiert werden?