Ziddiyatni hal qilish algoritmlari
Agar berilgan kalitga mos jadval qatori kerakli (qidirilayotgan) elementga ega
emasligi ma’lum bo’lsa, u holda ziddiyat (“konflikt”) yuzaga keldi deyiladi. Bunday
holat, agarda bir necha element bitta indeksga akslantiriladigan kalitlarga ega bo’lsa
yuzaga keladi. Bunday holatda mazkur berilgan kalit orqali to’liq aniqlanuvchi
indeks bo’yicha ikkinchi urinish amalga oshiriladi (Muqobil indeks shakllantirish
orqali). Ikkinchi indeksni shakllantirishning bir qancha usullari mavjud. Eng sodda
yo’llaridan biri bu – birinchi H(k) indekslari bir hil bo’lgan barcha qatorni bir-biriga
bog’lash, ya’ni bog’langan ro’yxat kabi. Bunday usulga to’g’ridan-to’g’ri bog’lash
(direct chaining) deb ataladi. Hosil bo’lgan ro’yxat elementlari asosiy jadvalda
joylashishi ham joylashmasligi ham mumkin.
Bunday holatda ro’yxat elementlari joylashgan xotira to’lalik (to’lib-toshish,
perepolnenie) sohasi deyiladi. Ushbu usulni kamchiligi, ikkilamchi ro’yxatlarni
kuzatib borish hamda ziddiyatga boruvchi elementlar ro’yxati har bir qatorida
murojaat uchun joy ajratish lozim bo’ladi.
Ziddiyatni hal qilishning yana bir usulida esa berilgan jadvalni berilgan
qatorida kerakli element mavjud bo’lmasa, toki kerakli element topilguncha yoki
bo’sh qatorga borguncha boshqa qatorlarini ko’rib chiqiladi. Agar qarab chiqish
bo’sh qatorgacha borib yetsa, u holda ko’rsatilgan kalit berilgan jadvalda yo’q deb
hisoblanadi. Ziddiyatni bunday hal qilish usuliga ochiq adresli deb ataladi. Tabiiyki,
ixtiyoriy berilgan kalit uchun indekslar ketma-ketligi ikkinchi urinishda bir hil
bo’lishi lozim. Bunday holatda qarab (ko’rib) chiqish algoritmi quyidagi sxemada
ishlaydi:
h = H(k)
i = 0
repeat
if T(h) = k
then element topildi
else if T(h) = free
then element jadvalda yo’q
else {ziddiyat}
i := i + 1
h := H(k) + G(i)
endif
endif
until topildi, yoki jadvalda yo’q.
Dostları ilə paylaş: |