You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Keširanje GA 79<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
Otvoreno hešovanje za rešavanje kolizije heš-tabela je detaljnije opisano u<br />
[Crm90] i [Pau97], gde se mogu videti i ostali pristupi rešavanju kolizije, kao i<br />
njihova uporedna analiza. Detaljnije informacije o heš-tabelama se mogu naći i<br />
u [Knu73], [Brs88] i [Man91].<br />
Napomenimo i to da, osim potrebe za realizacijom preko dvostruko<br />
povezane liste, nema nikakvih drugih uticaja činjenica da se razrešava pojava<br />
kolizije na heš-red strukturi, umesto na običnoj heš-tabeli.<br />
4.3.3 Dobijanje CRC kodova<br />
U slučaju keširanja GA javlja se potreba da u svakoj generaciji, za svaku<br />
jedinku ispitujemo da li već postoji u keš memoriji (funkcija Sadrži() na slici 4.1).<br />
Prilikom poziva date funkcije potrebno je izvršiti nekoliko poređenja genetskih<br />
kodova dve jedinke, gde prva pripada populaciji u nekoj generaciji GA, a druga<br />
je zapamćena u određenom bloku keš memorije.<br />
U većini primena poređenje reči je efikasno, jer se one najčešće razlikuju<br />
već u nekom od prvih nekoliko slova, pa se poređenje brzo završava. Međutim,<br />
genetski kodovi imaju nezgodnu osobinu da se posle nekoliko generacija GA<br />
grupišu u određeni region pretrage pa postanu vrlo slični.<br />
Ta osobina još više dolazi do izražaja ukoliko su genetski kodovi relativno<br />
veće dužine pa tada direktno poređenje može biti vrlo sporo. U tom slučaju je<br />
pogodnije poređenje genetskih kodova preko njihovih CRC vrednosti. Pri tome<br />
je neophodno izračunavanje CRC vrednosti za svaku jedinku u populaciji, ali se<br />
to izvršava samo jednom. Posle toga je poređenje vrlo efikasno, jer se genetski<br />
kodovi dve jedinke ne porede direktno, već se prvo uporede njihove CRC<br />
vrednosti. Ako su one različite, genetski kodovi jedinki se sigurno razlikuju.<br />
Direktno poređenje celih genetskih kodova je potrebno samo kada su CRC<br />
vrednosti jednake, što se u praksi dešava vrlo retko.<br />
Pošto za svaku jedinku postoji izračunata CRC vrednost njenog genetskog<br />
koda, heš-funkcija se primenjuje direktno na tu CRC vrednost, a ne na ceo<br />
genetski kod. Time, ne samo što je ubrzano i uprošćeno računanje heš-funkcije,<br />
već se jedinke ravnomernije smeštaju kao blokovi u keš memoriju.<br />
Za računanje 32-bitne CRC vrednosti je, u ovoj implementaciji, primenjen<br />
algoritam zasnovan na čitanju gotovih koeficijenata (table-driven algorithm)<br />
opisan u [Wlm93]. Pošto su koeficijenti uvek isti, ima ih relativno malo (256), a<br />
njihovo izračunavanje je vremenski relativno zahtevno, oni se posebno unapred<br />
računaju, i smeštaju u datoteku ”CRC.DAT”. Pri inicijalizaciji se samo dati<br />
koeficijenti pročitaju iz datoteke i smeste u niz crctable. Na osnovu koeficijenata<br />
iz datog niza se vrlo efikasno računa CRC vrednost, kao što se može videti sa<br />
slike 4.4 koja sadrži odgovarajući programski kod u jeziku C.