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.
:
Gesperrt durch User
Bspw. könnten alle Nullen und anderen gleichen Zahlen in Verbindung gebracht werden o.ä.
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?
Für Wert Zwei fand ich folgendes(Beispiel ist redundant): 166 - 156 - 10 - 72 - 10 - 34 - 6 - 20 - 10 - 4 - 2 - 3 - 7 - 15 - 30 - 55 - 6 - 114 - 10 - 239 - 10 - 156 - 10 - 72 - 10 - 34 - 6 - 20 - 10 - 4 - 2 - 3 - 7 - 15 - 30 - 55 - 6 - 114 - 10 - 239 - 10 - 156 - 10 - 72 - 34 - 6 - 20 - 10 - 4 - 2 - 3 - 7 - 15 - 30 - 55 - 6 - 114 - 10 - 239
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?
Dazu ist nicht mehr Wissen nötig. Wenn du mir helfen kannst, dann reicht das aus.