Algoritmus kerestetik

Olyan algoritmus kerestetik (a honorárium legyen mondjuk egy sör), amelyik lehetőleg gyorsan fut, és egy adott (véletlenszerűen generált) memóriaterületet átkódol úgy, hogy biztosan ne forduljon elő benne 0 értékű byte (és hogy az átkódolt adatból az eredetit egyértelműen vissza lehessen fejteni), mindezt minimális méretnövekedés mellett.

Ami eddig eszembe jutott az az, hogy a memóriaterületet felbontom 1415 byte-os* blokkokra, majd az így kapott (256 alapú számrendszerben) 1415 jegyű számokat átírom 255-alapú számrendszerbeli számokra, végül az így kapott szám mindegyik számjegyéhez hozzáadok 1-et. Így egy legfeljebb (256-alapú számrendszerben) 1416 jegyű számot kapok, ezt eltárolom egy 1416 byte-os blokkban, és készen vagyok. A visszafejtés nyilván egyértelmű, és így csak 1/1416-oddal nő meg az eredeti adatmennyiség, ami nem egy túl nagy növekedés.

Ha esetleg valaki tud arra jó algoritmust, hogy hogyan lehet egy nagyméretű számot az egyik számrendszerből a másikba konvertálni, már azzal is irtó sokat segítenétek. Köszi!


* Azért pont 1415-jegyű számok, mert az (n+1) alapú számrendszerben k helyiértéken összesen (n+1)k szám tárolható. Ha szeretném megtalálni azt a legnagyobb k-t, amire az n alapú számrendszerben biztosan elég (k+1) helyiértéket használnom az előbbi szám tárolására, akkor a nk+1 ≥ (n+1)k feltételnek eleget tevő legynagyobb k-t kell megadni. n = 255 esetén (hacsak el nem számoltam) kmax = 1415.
Tagek:
 
Utoljára módosította SAdam 2009.III.07 17:51-n; 8 hozzászólás
Bejegyzés módosítása | PermaLink
Szavazás letiltva.