10-Amaliy mashgʻulot: Saralash masalasi uchun muayyan algoritmlar va ularning murakkabligini aniqlash



Download 144,58 Kb.
Pdf ko'rish
Sana13.07.2022
Hajmi144,58 Kb.
#787648


10-Amaliy mashgʻulot: Saralash masalasi uchun muayyan algoritmlar va 
ularning murakkabligini aniqlash. 
Joylashtirish 
usuli 
(xeshlashtirish) 
ALGORITMLAR 
VA 
BERILGANLAR 
STRUKTURASIda element joylashgan oʻrinni tez aniqlashga yoʻnaltirilgan usuldir. 
Joylashtirish usulida maʻlumotlar oddiy massiv sifatida ifodalangan boʻladi. Elementni jadvalga 
qoʻshishdan oldin uning adresi xesh-funksiya orqali aniqlanadi: 
A = h(K)
, bu yerda K – kalit, A 
– jadvaldagi element adresi boʻlib, 0 



N-1, shart oʻrinli boʻladi.
F xesh-funksiya deb R kiruvchi elementlar toʻplamini manfiy boʻlmagan butun sonlar 
toʻplami Z ga oʻgirishga aytiladi. Z:F(r)=n, rϵR, nϵZ. Xesh-adreslash bu xesh-funksiya qiymatlar 
soxasini qandaydir bir maʻlumotlar massivining yacheykasi adresi sifatida foydalanishdan iborat. 
U holda maʻlumotlar massivi oʻlchami foydalanilayotgan xesh-funksiyaning qiymatlar soxasiga 
mos kelishi kerak.
Turli A
1
, A
2
, A
3
identifikatorlar uchun mos ravishda n
1
, n
2
, n
3
xesh-funksiya qiymatlari toʻgʻri 
kelsin. n
1
, n
2
, n
3
adreslarga mos yacheykalarda A
1
, A
2
, A
3
identifikatorlar haqida maʻlumot 
joylanadi. A
3
identifikatorni qidirishda n
3
adres qiymati hisoblanadi va tegishli jadval 
yacheykasidan maʻlumotlar tanlanadi.
Bu metod juda effektiv, elementlari jadvalga joylash vaqti xam, qidiruv vaqti ham faqat xesh-
funksiyani xisoblashga ketadi.
Bu usulning 2 ta yaqqol kamchiligi bor. Ulardan biri: identifikatorlar jadvalining xotira 
xajmidan unumsiz foydalanilishi. Massiv oʻlchami xesh-funksiya qiymatlar soxasiga mos 
kelishi kerak, ayni vaqtda real xolatda jadvalda saqlanayotgan identifikatorlar ancha kam 
boʻlishi mumkin. Ikkinchi kamchiligi mos keluvchi xesh-funksiyani tanlay bilish.
Xesh-funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va 
mantiqiy amallarni bajarish xisobiga erishiladi. xesh-adreslashda identifikatorlar jadvalining 
bir yacheykasiga 2 ta turli xil boʻlgan identifikatorlar joylashishi mumkin emas. Bu vaziyat, 
yaʻni 2 yoki undan ortiq identifikatorlar xesh funksiyaning bir xil qiymatiga ega boʻlish 
xodisasi kolliziya deb nomlanadi. Kolliziyaning yuzaga kelishi 2 ta xar xil identifikator A

va 


A
2
larning xesh-funksiya qiymatlari n
1
va n

bir xil (n
1
=n
2
) boʻlishi xisoblanadi. Xesh-
funksiyadan natija olish - “xeshlash” simvollar zanjiri ustida oddiy arifmetik va mantiqiy 
amallarni bajarish xisobiga erishiladi. xesh-adreslashda identifikatorlar jadvalining bir 
yacheykasiga 2 ta turli xil boʻlgan identifikatorlar joylashishi mumkin emas. Bu vaziyat, yaʻni 
2 yoki undan ortiq identifikatorlar xesh funksiyaning bir xil qiymatiga ega boʻlish xodisasi 
kolliziya deb nomlanadi. Kolliziyaning yuzaga kelishi 2 ta xar xil identifikator A

va 
A
2
larning xesh-funksiya qiymatlari n
1
va n

bir xil (n
1
=n
2
) boʻlishi xisoblanadi.
Bu metodga koʻra, A element uchun xesh-funksiya orqali hisoblangan h(A) adresi band 
boʻlgan yacheykani koʻrsatsa, unda n
1
=h
1
(A) funksiya qiymatini hisoblash zarur va n
1
adresga 
tegishli yacheykani bandligini tekshirish kerak. Agar n
1
xam band boʻlsa, unda h
2
(A) qiymat 
hisoblanadi, shu tariqa boʻsh yacheyka torilguncha yoki h
i
(A) navbatdagi qiymat h(A) bilan 
mos kelgunga qadar davom etadi. Oxirgi xolatda identifikatorlar jadvali toʻlgan va boʻsh joy 
boshqa yoʻq degan xatolik toʻgʻrisida maʻlumot beradi.
h
i
(A) funksiyani xisoblashni eng oddiy metodi, uni h
i
(A)=(h(A)+p
i
)modN
m
asosida qurishdir, 
bu yerda p
i
qandaydir bir xisoblangan butun son, N
m
–identifikatorlar jadvalidagi 
elementlarning maksimal soni. Oʻz oʻrnida eng oddiy usul p

ni oʻrniga i ni qoʻyish boʻladi. 
Unda quyidagi formulani olamiz h
i
(A)=(h(A)+i)modN
m
. Bu holda xesh-funksiyaning bir xil 
qiymatlariga mos kelgan identifikatorlarni joylash uchun boʻsh yacheykani qidirish mantiqan
xesh-funksiya h(A) koʻrsatgan joydan boshlanadi.


Massiv elementini indeks buyicha topish kerak boʻlsin. Buning uchun avval indeksni 
xesh adresning mos qiymatiga aylantirish lozim va shundan soʻnggina qidiruvni amalga 
oshirish mumkin.
Xeshlashtirish misolida
primary 
nomli tuzilmalar massividan foydalaniladi: 
#define MAX 260 
struct htype { 
int index; /* mantiqiy indeks */ 
int val; /* malumotlar elementining xos qiymati */ 
struct htype *next; /* Shunday xesh-adresli keyingi elemntga koʻrsatkich */ 
} primary[MAX]; 
Bu massivdan foydalanishdan avval uni inisializasiya qilish zarur.Quyidagi funksiya 
index 
maydoniga -1 qiymatini beradi; Bu qiymat boʻsh elementni bildiradi. 
NULL 
qiymati 
next
maydonidagi xeshlashtirishning boʻsh zanjiriga mos keladi. 
/* xesh-massivni inisializasiya qilish. */ 
void init(void) 

register int i; 
for (i=0; iprimary[i].index = -1; 
primary[i].next = NULL; /* boʻsh zanjir */ 
primary[i].val = 0; 


store() 
prosedurasi yacheyka nomini birlamchi 
primary 
massividagi xesh adresga 
aylantiradi. Xesh adresda koʻrsatilgan pozisiya band boʻlsa, prosedura bu yozuvni avtomatik 
xolda 
slstore() 
fuknsiyaning modifikasiyalangan versiyasi yordamida kolliziya roʻyxatiga 
qoʻshib qoʻyadi. Bu funksiyalar quyida keltirilgan.
/* xesh-adresni xisoblash va qiymatini saqlash */ 
void store(char *cell_name, int v) 

int h, loc; 
struct htype *p; 
/* xesh-adresni olish*/ 
loc = *cell_name - ʻAʻ; /* ustun */ 
loc += (atoi(&cell_name[1])-1) * 26; /* qator * kenglik + ustun */ 


h = loc/10; /* hash */ 
/* agar olingan pozisiya band boʻlmasa, uni saqlash yoki mantiqiy indekslar ustma – ust 
tushgan xolda saqlash */ 
if(primary[h].index==-1 || primary[h].index==loc) { 
primary[h].index = loc; 
primary[h].val = v; 
return; 

/*aks xolda kolliziyalar roʻyxatini tuzish va unga xesh – adresni qoʻshish */ 
p = (struct htype *) malloc(sizeof(struct htype)); 
if(!p) { 
printf("xotira yetishmayapti\n"); 
return; 

p->index = loc; 
p->val = v; 
slstore(p, &primary[h]); 

/* Elementlarni kolliziya roʻyxatiga qoʻshish. */ 
void slstore(struct htype *i, 
struct htype *start) 

struct htype *old, *p; 
old = start; 
/* roʻyxat oxirini topish */ 
while(start) { 
old = start; 
start = start->next; 

/* yangi yozuv bilan bogʻlash */ 
old->next = i; 
i->next = NULL; 

Elementning qiymatini olish uchun dastur avval xesh-adresni xisoblaydi va uni 
qidirilayotgan massiv elementi indeks bilan tengligini tekshiradi.Agar teng boʻlsa yacheyka 
qiymati qaytariladi, aks xolda kolliziyalar roʻyxatida qidiruv amalga oshiriladi. Bu vazifalarni
bajaruvchi 
find()
,quyida keltirilgan: 
/* xesh-adresni xisoblash va qiymatini olish. */ 
int find(char *cell_name) 



int h, loc; 
struct htype *p; 
/* xesh-adres qiymatini olish */ 
loc = *cell_name - ʻAʻ; /* stolbes */ 
loc += (atoi(&cell_name[1])-1) * 26; /* qator * kenglik + ustun */ 
h = loc/10; 
/* yacheyka topilsa,qiymatni qaytarish */ 
if(primary[h].index == loc) return(primary[h].val); 
else { /* aks xolda kolliziyalar roʻyxatini koʻrish */ 
p = primary[h].next; 
while(p) { 
if(p->index == loc) return p->val; 
p = p->next; 

printf("Yacheyka massivda yoʻq\n"); 
return -1; 


Bu dasturga oʻchirish funksiyasini qoʻyish lozim. 

Download 144,58 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish