Ezt ti hogy csinálnátok meg?
Egy programot szeretnék, ami egy fájlban tárolt 0 és 1 karaktereket tömörít. Például ilyeneket: 00000000001111000000000000001111111110000011111111010101000000000
Úgy szeretném, hogy ha nyolc egyforma van egymás után, akkor azt úgy írja ki, hogy egy bájtos leírót használ. Ahol is a tömörített leírójának balról első bitje egy, a második bitje 0, ha nullákat és 1 ha egyeseket tömörít. A további hat bit meg azt írja le, ahány darab van tömörítve. Ha mondjuk 10 és mind egyes, akkor a leíró bájt ilyen: 11001010
Ha mondjuk 14 és mind nulla, akkor meg ilyen: 10001110
Ha nem tömörít, mert nincs legalább nyolc egyforma, akkor a leíró első bitje 0 legyen és a többi bit a hét karakteres szekvenciának megfelelően az érkező nullák és egyesek sora.
mondjuk 0100110 esetében a leíró ilyen: 00100110
Az egészet freepascalban szeretném megcsinálni. Köszönök minden segitséget.
Nem tudom, mennyire lett érthető?
Az érkező karakterek szekvenciáját mindig egy bájttal írja le. Ez a leíró a nyolc bitből egyet, balról az elsőt arra használ, hogy azt mutassa, tömörített a tartalma, vagy sem. Ha tömörített, akkor mindig egyes, ha nem az, akkor mindig nulla.
1....... Ez tömöritett.
0....... Ez meg nem.
Ha nincs tömörítve, akkor az első nulla után csak a hét darab nullákból és egyesekből álló, addig elemzett karakterek jönnek.
Tehát, ha például ez lesz beolvasva, hogy 0100110, akor a leíró tartalma ugyanez, csak elő kerül egy nulla is. 0 0100110, jelezve, hogy nem tömöritett.
A tömörített pedig úgy néz ki, hogy az első bit mindig 1, ami jelzi, hogy tömörített adat, a második bit 0 ha nullákat és 1 ha egyeseket tömörít a leíró, a többi hat bit meg a darabszámukat jelzi.
Hát ez egy alvariánsa lenne a létező Huffman-kódolónak, csak bitszintre levetítve szerintem. Nézz annak utána esetleg.
De amúgy leírtad nagyon pontosan mit szeretnél, akkor mi a gond?
Hogy valaki írja meg neked???
Ez nem Huffmann.
Nem azt szeretném, hogy írja meg valaki, hanem azt, hogy a program optimális struktúráját megkapjam.
Kicsit megvadítottad a futáshossz-kódolást, úgy látom. :-)
De a kulcsszó a bitműveletek. Ha csak egy bitre vagy kíváncsi, akkor az értéket "ÉS" kapcsolatba hozod egy olyan értékkel (úgynevezett maszkkal), aminek csak azon bitje 1-es, amelyik bitre kíváncsi vagy. Tehát ha te a bájt első bitjére vagy kíváncsi, akkor 128-cal ÉS-ezed, és ha az eredmény nulla, akkor az a bit nulla volt, ha nem nulla (jelen esetben 128), akkor meg 1-es volt a bit. Ugyanezt meg tudod csinálni a 2. bittel is, csak akkor 64-el kell ÉS-ezned. Ha pedig az első 2 bit kivételével vagy kíváncsi a szám értékére, akkor meg 63-mal (bináris: 00111111) ÉS-ezed.
"a program optimális struktúráját megkapjam"
Ez alatt mit értesz?
00000000000000000000001111111111000000000000000000000000111111111111111111111111111100011000011100000000
10010110
11001010
10011000
11011100
00001100
00011100
0000000.
00000000001111000000000000001111111110000011111111010101000000000
10001010
01111000
10001011
11001001
00000011
01111110
01010100
00000000
"a program optimális struktúráját megkapjam"
wat?!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!