Run Length En/Decoding [Komprimierung B+/BB]
Übersicht

![]() |
ozzi789Betreff: Run Length En/Decoding [Komprimierung B+/BB] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abend liebe Community
Momentan behandeln wir in der Schule diverse Komprimierungsverfahren. Da es mich sehr interessiert habe ich RLE in BB umgesetzt. Für die Leute denen dies jetzt nichts sagt, RLE komprimiert Strings/Daten. Der Trick dabei ist, sich wiederholende Zeichen, z.B bei einer 2D Map mit einer Runlenght zu speichern. Soll heissen 00000011111111110000 (0 ist ein leerer Block, 1 eine Wand) wird zu 6x010x14x0 Um das Ganze wieder ohne Verluste zu decoden, muss jedoch ein Markerbyte gesetzt werden (sodass man weiss, dass jetzt eine Wiederholung anfängt) Sagen wir & ist unser Markerbyte. Hier unterscheidet sich mein Algo mit dem "Normalen", da ich die die Stellenzahl des Runcounts auch übergebe und trotzdem alle möglichen ASCII Zeichen verwenden kann. D.h unser 00000011110000 wird zu &160&2101&40 Das Rote &210 soll heissen &-hier fängt eine Wiederholung an, die Anzahl Chars die die Anzahl beschreiben sind 2 ('1'+'0') also 10 mal das nächste Zeichen wiederholen. Wir haben also doch einige Zeichen gesparrt, stellt euch dass jetzt bei grösseren Maps vor ![]() Für die denen das jetzt Konfus erscheint (bin auch schon etwas müde ![]() Hier der Wikipedia Link http://en.wikipedia.org/wiki/Run-length_encoding Eine Demo gibt es hier zum Download (OZ_RLE.exe) http://zgheb.com/cms/downloads...p;dir=desc Ohne Pics saug ich nix ![]() Und hier der BB Code V.1.1 - Performance optimiert BlitzBasic: [AUSKLAPPEN]
Der Code kann sicherlich noch optimiert werden, er ist aber 100% einsatzfähig und schon ziemlich flink. Feedback ist wie immer, sehr erwünscht! Grüsse Ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
- Zuletzt bearbeitet von ozzi789 am Mo, Nov 28, 2011 11:14, insgesamt einmal bearbeitet
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
coole Sache! Einfacher Optimierungsvorschlag: cursign den Wert von nextsign zuweisen, und cursign nur vor der Schleife auf die Stringopteration setzen. Ausserdem wäre es evtl. nützlich, anstatt Strings zu vergleichen diese mit Chr() als Integer zu vergleichen, oder gar die String-Abfolge gleich als Bank einlesen. Ich weiss jedoch nicht, wie viel Performanceschub die beiden Methoden bringen. MfG |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abend Propellator,
Danke für die Rückmeldung, werd mich gleich ans Werk machen ![]() Grüsse |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group