You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
78 Paralelizacija GA za rešavanje nekih NP-kompletnih problema<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
u datom slučaju, nije genetski kod jedinke, već njegova CRC vrednost. Poznato<br />
je da pri CRC preslikavanju slični argumenti daju potpuno različite vrednosti.<br />
Zbog toga su CRC vrednosti već prilično ravnomeno raspoređene u 32-bitnom<br />
opsegu, pa je tada zadatak heš-funkcije za što ravnomernijim rasporedom<br />
blokova u velikoj meri olakšan.<br />
Računanje heš-funkcije uz pomoć metode množenja je vrlo jednostavno, a<br />
ona se implementira pomoću formule:<br />
h(k) = int(m * frac(k*A)). (4.1)<br />
Vrednost m je veličina heš-tabele, k argument heš-funkcije, a A je unapred<br />
izabrana konstanta, pri čemu funkcija int računa celobrojni, a frac razlomljeni<br />
deo izraza. U ovoj implementaciji je izabrano A =<br />
5−<br />
1<br />
2<br />
≈ 0.618034 (ova<br />
vrednost je preporučena u [Knu73]).<br />
4.3.2 Rešavanje kolizije<br />
Kolizija je pojava kada postoji više blokova sa istom vrednošću heš-funkcije.<br />
U tekućoj implementaciji keširanja GA, za sprečavanje kolizije koristi se<br />
otvoreno hešovanje (collision resolution by chaining). Dati pristup razrešava<br />
koliziju formiranjem povezane liste za svaku poziciju heš-tabele, pa se na taj<br />
način može pojaviti i više blokova sa istom vrednošću. Pošto su u datoj<br />
implementaciji spregnuti heš-tabela i red, umesto obične (jednostruke)<br />
povezane liste, za svaku poziciju heš-tabele je neophodno da se koristi<br />
dvostruko povezana lista, kao što se može videti na slici 4.3 .<br />
Slika 4.3 Rešavanje kolizije primenom otvorenog hešovanja<br />
Pretraživanje heš-tabele se odvija u dve faze. U prvoj fazi se izračunava<br />
vrednost heš-funkcije za dati blok i na osnovu te vrednosti određuje se<br />
pokazivač na povezanu listu. Zatim se u drugoj fazi, odgovarajuća povezana<br />
lista pretražuje sekvencijalno, do pronalaženja traženog elementa. Pošto je u<br />
datoj implementaciji broj pozicija u heš-tabeli jednak broju vrednosti hešfunkcije,<br />
a data heš-funkcija prilično ravnomerno raspoređuje blokove, dobijene<br />
dvostruko povezane liste su kratke, i brzo se pretražuju.<br />
Novi element se ubacuje na prvo mesto dvostruko povezane liste, a ostali<br />
blokovi sa tom vrednošću se pomeraju za jedno mesto, što se najlakše<br />
implementira, a relativno je brzo. Izbacivanje elementa iz heš-tabele je iste<br />
složenosti kao pretraživanje, uz dodatno postavljanje pokazivača u<br />
odgovarajućoj dvostruko povezanoj listi.