On 1 May 02, at 21:23, sdragon=freemail.hu wrote:
> 1, mi a kulonbseg a Shannon-Fano fele kodolasi eljaras, es
> a huffman fele kodolas kozott?
Nagyon hasonlitanak egymasra, a kulonbseg az, hogy a Huffman
alulrol felfele epiti fel a fat, a SF pedig felulrol lefele.
Huffman: minden lepesben a ket legkisebb gyakorisagu elemet
osszekotjuk (=fat epitunk belole, a ket elem a falevel), egyik kodja
lesz 0, masike 1, es a keletkezo uj elem (=a fa elagazasa) a ketto
gyakorisaganak osszegevel fog rendelkezni, es ezt az elemet is
ugy kezeljuk, mint az eredeti betuket. Ezt a lepest ismeteljuk
mindaddig, amig minden betu (elem) bekerult a faba, vagyis amig
egyetlen fa nem lesz belole.
Shannon-Fano: az elemeket gyakorisaguk szerint sorbarakjuk, es
ezt a sort kettevagjuk ugy, hogy a ket felben nagyjabol azonos
legyen a gyakorisagok osszege (vagyis praktikusan ugy csinaljuk,
hogy osszeadogatjuk a gyakorisagokat, es megallunk (= ott lesz a
vagasi hely), amikor atlepjuk a 0.5-et). A vagas egyik fele lesz 0, a
masik meg 1. Aztan mindket oldalt tovabb vagdaljuk
hasonlokeppen, vagyis a gyakorisagaik osszegenek a felezesevel.
A Huffman elvileg optimalis, a Shannon-Fano nem (tehat az
rosszabb altalaban). Megvalositasat tekintve mindketto nagyon
egyszeru, bar az SF kicsit gyorsabb, mert nem kell minden lepes
utan sorbarendezve beszurni (a H-nal kell).
Egyebkent pongyolan Huffman kodnak szoktak nevezni a Fax G3
kodban hasznalt kodolast is, de az a lenyeget tekintve mas, mert
nem epit fel az aktualis keptol fuggo fát, hanem egyetlen statikus
fát hasznal allandoan. Viszont igy megvan az az elonye, hogy a fát
magát nem kell a kompresszalt file-ban eltarolni.
> 2, egy win32-es proggybol meghivok egy stdin/stdout proggyt,
> es be kene allitani programbol az environment-et,hogyan?
A CreateProcess() fuggvenynek a 7. parametere az lpEnvironment,
amit ide irsz (0 byte-tal lezart stringek egymas utan, legvegen még
1 lezaro 0 byte), az lesz a processz environmentje. Ha NULL-t irsz
ide, akkor oroklodik az antualis environment. Ha csak nehany
valtozot akarsz atadni, akkor az az egyszerubb, hogy az
lpEnvironment-ben csak azokat atadod (pl. ezzel a stringgel:
"user=Akarki\0home=akarhol\0"
csak a user es a home valtozok lesznek a program env-eben. Ha
az osszes aktualis valtozot is at akarod adni, meg raadasul meg
nehanyat is, akkor csinalhatod azt is, hogy a
SetEnvironmentVariable() fuggvenyt hasznalva beallitod a kivant
valtozokat, aztan a CreateProcess()-nel NULL-t adsz be a 7.
parameterkent, hogy orokolje az aktualis ertekeket.
István
|