Ich habe ein neues Tool veröffentlicht:
Bitte melde dich an, um diesen Link zu sehen.
"compactor" ist ein Werkzeug für die Datenkompression von Read-only Arrays. Vorteile gegenüber üblichen Verfahren: es wird keine Zeit und kein zusätzlicher Speicher für das entpacken benötigt.
Hier ein einfaches Beispiel zur Erläuterung. Eingabe seien zwei Arrays:
readOnlyArray1 = 1 2
readOnlyArray2 = 2 3
"compactor" Ausgabe dazu:
compressedArray = 1 2 3
readOnlyArray1 = compressedArray+0
readOnlyArray2 = compressedArray+1
In diesem Beispiel wird also 1 Byte gespart. Der Zugriff auf die Daten ist vor und nach der Kompression diesselbe, es wird also keine Zeit für die Dekompression benötigt. Es wird auch kein weiterer Speicher zur Dekompression benötigt, da es eine Dekompression im herkömmlichen Sinne gar nicht gibt.
Wird der Wert "2" im gepackten Array geändert, so ändert sich dieser Wert sowohl für Array 1 als auch für Array 2. Deshalb sollten nur Read-Only Daten für diese Methode verwendet werden.
Zusätzlich wird "Data alignment" unterstützt, der Abstand in Relation zum Ausgabearray kann also für Eingabearrays vorgegeben werden. Alignments >1 können sehr schnell zu einem schlechten Kompressionsergebnis führen, der Einsatz von Data alignment sollte also mit Bedacht gewählt sein.
Die Zeiten für Kompression und Dekompression sind bei dieser Methode extrem asymmetrisch, das gilt besonders für viele und umfangreiche Eingabe-Arrays. Ich habe daher viel Zeit und Mühe in eine schnelle Berechnung gesteckt (das Problem ist NP-hard). Die Geschwindigkeit sollte jetzt für Retro-Computing ausreichend sein, es kann allerdings auch ein Timeout bei der Berechnung gesetzt werden.
Ich hoffe dieses Werkzeug ist für den einen oder die andere nützlich. Falls Ihr also verzweifelt nach ein paar zusätzlichen Bytes in Eurer Software sucht, solltet Ihr Euch dieses Werkzeug mal ansehen!