Gå til innhold

Pakkeprogram med 92 til 1 ratio UTEN tap av data.


Anbefalte innlegg

Videoannonse
Annonse

Hva er problemet ditt? maximumratione er 92-1. Vet det høres extremt ut men jeg hadde en ahaopplevelse her om dagen. Forklaringen følger:

 

Når man bruker OPEN filename$ FOR BINARY AS #1 og GET #1,1,a får man ut filens fire første bytes.(correct me if I´m wrong!). Ved å oversette disse til binærkoder(dette er problemet) får jeg 32 ettall og nuller. Så kommer pakingen:

(bin$ er binærtallet, liksom)

OPEN "fila_jeg_skal_pakke_inn_i.noe" FOR OUTPUT AS #1

IF bin$ = "00000000000000000000000000000000" then print #1, chr$(33);chr$(33);

IF bin$ = "00000000000000000000000000000001" then print #1, chr$(33);chr$(34);

IF bin$ = "00000000000000000000000000000010" then print #1, chr$(33);chr$(35);

 

OSV.

 

kan seff mekke en sak som bare looper i steden for å skrive opp nesten uendelig mange slike IF´er.

 

Som du ser henter jeg ut binærkoden for 4 byte eller 4 tegn om du vil og erstatter det med 2 tegn. Dette git riktignokk bare 1-2 ratio men med alle tegn fra og med chr$(33); chr$(33); til om med chr$(255); chr$(255); kan jeg få nokk kombinasjoner til å erstatte 192 byte(tror jeg?) med 2 byte!!

 

Litt vanskelig å forklare men har det helt klart for meg. Utpakkingen foregår jo seff bare andre veien. Uten tap av data...

Lenke til kommentar

La oss seie at du har blokkar på 32 bits. Dette gir nesten 4,3 mrd. kombinasjonar.

Du vil (slik eg forstår det)erstatte kvar 32 bits blokk med to blokker på 8 bits, altså 16 bits. Dette er 65536 kombinasjonar. I tillegg vil du ikkje ta i bruk chr$(1)-chr$(32), noko som ytterlegare reduserer antalet brukbare teikn.

Dette kan gå bra dersom du veit at det originale(ukomprimerte) alfabetet ditt kun inneheld 65536 forskjellige teikn. Dersom det inneheld fleir vil du få tvetydige teikn i den komprimerte outputen. Altså umogleg å dekode.

 

Til slutt eit tips:

Ta eit søk på google etter Runlength-, Huffmann- eller LZW-koding.

 

[ Denne Melding var redigert av: Ola PeK på 2002-04-29 17:02 ]

Lenke til kommentar

SORRY!!!! Veit det. Hadde ikke noen mulighet til å regne med så store tall. QBASIC takkler det ikke og PC´en med windows er nede. Hakke bran nokk kalkis heller. Kom frem til det samme som deg ca en halvtime etter at jeg skreiv det :smile:

Lenke til kommentar

Ok, du er tilgitt :smile:

 

Du prøvde i allfall.

Vil likevel anbefale deg å lese litt om Huffman og Runlength og andre kodingsteknikkar.(kan jo starte med runlength, ettersom det er ganske enkelt å forstå)

Koding og kompresjon er eit ganske interessant fagfelt, der det garantert er rom for forbetringar.

Neste gong finn du kanskje på noko som funkar...

Lenke til kommentar
  • 1 år senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...