Gisternacht zat ik dus wat te denken over (data) compressie, en kreeg ik een (misschien wel interessant) idee. Ik heb het niet volledig uitgedacht, dus misschien zitten er wel logica fouten in.
Zover ik weet werken alle compressie algorithmes (voor formaten zoals:ARJ,ZIP, ARC, CAB,) tegenwoordig met vaste algorithmes: Dictionary, Run Length Encoding (RLE), Sequential*, en vast nog wel een paar methodes.
* (Sequential = als je bytes hebt van bijvoorbeeld, 1,2,3,4,5, er slechts staat "1 t/m 5")
Nou zat ik dus te denken als je nou de compressie zelf een soort programmeer taal laat zijn. Het programma waar mee je comprimeert (of compiled
) bedenkt de juiste "code" voor het te comprimeren bestand.
Want met huidige formaten zit je vast aan een methode (Meerdere keren een andere compressie methode is niet altijd geweldig). MEt die programmeer taal zou je bijvoorbeeld makkelijk kunnen switchen tussen RLE en sequential, en als je goed met de bits omgaat, kun je een redelijk 'programmeer' taaltje bedenken die met 1 byte werkt (met 2 bits heb je al 4 mogelijke instructies, en in 1 byte zitten er 8 dus..)
Als je dus in ASCII waarden een bestandje hebt zoals dit:
12345671111111111187654
\--seq--/ \-----RLE-----/\-seq-/
Dan zou je die kunnen verdelen in 3 'instructies', zoals je hierboven kunt zien. Volgens mij is het mogelijk om een instructie met 2 bytes werkend te krijgen (weer door de bits), maar ik ga uit van 3:
'opcode' (1b), instructie(1b, 2 bit gebruikt), 'opcode' (1b)
Voor seq: asciistart,instructie, "stap grootte"
Voor rle: asciicode, instructie, "hoevaak?"
Ik zit alleen te denken hoe het mogelijk is om een dictionary te kunnen maken, waarschijnlijk door een simpele BSP tree met de ascii waarden van elke karakter, moet ik nog maar eens over nadenken
Als het gedecomprimeert wordt, dan worden de 'instructies' uitgevoert en komt er hopelijk dezelfde file weer uit. Deze methode zou in principe het hele compressie proces dynamischer moeten maken, met het hopelijk uiteindelijke resultaat om alles klein(er) te krijgen
Nou ben ik benieuwd of dit eigenlijk zou kunnen werken, en wat jullie ervan vinden
. Misschien slaat het nergens op, maar ja ik heb er ook nogal laat om zitten te denken
Zover ik weet werken alle compressie algorithmes (voor formaten zoals:ARJ,ZIP, ARC, CAB,) tegenwoordig met vaste algorithmes: Dictionary, Run Length Encoding (RLE), Sequential*, en vast nog wel een paar methodes.
* (Sequential = als je bytes hebt van bijvoorbeeld, 1,2,3,4,5, er slechts staat "1 t/m 5")
Nou zat ik dus te denken als je nou de compressie zelf een soort programmeer taal laat zijn. Het programma waar mee je comprimeert (of compiled
Want met huidige formaten zit je vast aan een methode (Meerdere keren een andere compressie methode is niet altijd geweldig). MEt die programmeer taal zou je bijvoorbeeld makkelijk kunnen switchen tussen RLE en sequential, en als je goed met de bits omgaat, kun je een redelijk 'programmeer' taaltje bedenken die met 1 byte werkt (met 2 bits heb je al 4 mogelijke instructies, en in 1 byte zitten er 8 dus..)
Als je dus in ASCII waarden een bestandje hebt zoals dit:
12345671111111111187654
\--seq--/ \-----RLE-----/\-seq-/
Dan zou je die kunnen verdelen in 3 'instructies', zoals je hierboven kunt zien. Volgens mij is het mogelijk om een instructie met 2 bytes werkend te krijgen (weer door de bits), maar ik ga uit van 3:
'opcode' (1b), instructie(1b, 2 bit gebruikt), 'opcode' (1b)
Voor seq: asciistart,instructie, "stap grootte"
Voor rle: asciicode, instructie, "hoevaak?"
Ik zit alleen te denken hoe het mogelijk is om een dictionary te kunnen maken, waarschijnlijk door een simpele BSP tree met de ascii waarden van elke karakter, moet ik nog maar eens over nadenken
Als het gedecomprimeert wordt, dan worden de 'instructies' uitgevoert en komt er hopelijk dezelfde file weer uit. Deze methode zou in principe het hele compressie proces dynamischer moeten maken, met het hopelijk uiteindelijke resultaat om alles klein(er) te krijgen
Nou ben ik benieuwd of dit eigenlijk zou kunnen werken, en wat jullie ervan vinden