08.03.2015 Views

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!