Tatu samarqand filiali


 Qidiruv jadvalini qayta tartibga keltirish



Yüklə 487,85 Kb.
Pdf görüntüsü
səhifə16/31
tarix07.02.2022
ölçüsü487,85 Kb.
#52226
1   ...   12   13   14   15   16   17   18   19   ...   31
algoritmga kirish fanidan laboratoriya mashgulotlari boyicha uslubiy kursatma

2.4.  Qidiruv jadvalini qayta tartibga keltirish 

  



Umuman    olganda,    jadvalda    har    bir    elementni    qidirish    ehtimolligini 

qandaydir bir qiymat bilan izohlash mumkin. Faraz qilaylik jadvalda qidirilayotgan 

element    mavjud.    U    holda    qidiruv    amalga    oshirilayotgan    jadvalni    diskret  

holatga  ega    tizim    sifatida    qarash    mumkin    hamda    unda    qidirilayotgan  

elementni    topish  ehtimolligi  –  bu  tizim  i-chi  holati  ehtimolligi  p(i)  deb  olish 

mumkin. 


 

Jadvalni  diskret  tizim  sifatida  qaraganimizda,  undagi  taqqoslashlar  soni diskret 

tasodifiy miqdorlar qiymatlarini matematik kutilmasini ifodalaydi. 

 

 



Ma’lumotlar jadvalda quyidagi ko’rinishda tartiblangan bo’lishi lozim: 

 

Bu    shart    taqqoslashlar    sonini    kamaytirib,    samaradorlikni    oshiradi.  



Sababi, ketma-ket  qidiruv  birinchi  elementdan  boshlanganligi  uchun  eng  ko’p  

murojaat  qilinadigan elementni birinchiga qo’yish lozim.  

Qidiruv    jadvalini    qayta    tartibga    keltirishning    eng    ko’p    ishlatiladigan  

ikkita  usuli mavjud. Ularni bir bog’lamli ro’yhatlar misolida ko’rib chiqamiz.  

1. Topilgan elementni ro’yhat boshiga qo’yish orqali qayta tartibga keltirish.  

2. Transpozitsiya usuli. 

 

5.5.  Topilgan elementni ro’yhat boshiga qo’yish orqali  qayta tartibga keltirish 



 

 

2.2-rasm. Ro’yxatni qayta tartibga keltirish  




Topilgan element 2.2-rasmdagidek birdaniga ro’yhat boshiga joylashtiriladi. 

Tuzilmadan har safar birorta element izlab topilsa va u ro’yhat boshiga olib borib 

qo’yilaversa,  natijada  oxirgi  izlangan  elementlar  ro’yhat  boshiga  joylashib  qoladi 

va  biz  oxirgi  vaqtlarda  izlangan  elementlarni  tez  izlab  topish  imkoniga  ega 

bo’lamiz.   

Boshida    q    ko’rsatkich    bo’sh,    p    esa    ro’yhat    boshini    ko’rsatadi;    p  

ikkinchi  elementni  ko’rsatganda,  q  birinchini  ko’rsatadi.  Ro’yhat  boshi 

ko’rsatkichi (table) birinchi  elementni  ko’rsatadi.  Ro’yhatda  key  kalitli  element  

topilsa,    u    p  ko’rsatkich  bilan,  undan  oldingi  element  esa  q  ko’rsatkich  bilan 

belgilanadi.  Shu  topilgan  p  elementni  ro’yhat  boshiga  joylashtiriladi.  Dastur  kodi 

node *q=NULL;  

node *p=table;  

while (p !=NULL){  

      if (key == p->k){  

if (q == NULL) { //o‘rinlashtirish shart emas  

             search = p;  

 exit(0);  

 }  


        q->nxt = p->nxt;  

 p->nxt = table;  

        table = p;  

        exit(0);  

      }  

    q = p;  

    p = p->nxt;  

}  


search = NULL;   

             exit(0);  

5.6.  Transpozitsiya usuli  

  



Ushbu  usulda  topilgan  element  ro’yhatda  bitta  oldingi  element  bilan  o’rin 

almashtiriladi.  Agarda  mazkur elementga ko’p murojaat qilinsa,  bittadan oldinga 

surilib  borib  natijada  ro’yhat  boshiga  kelib  qoladi.  Ushbu  usulning  afzalligi 

shundaki,  tuzilmada  ko’p  murojaat  qilinadigan  elementlar  ro’yhat  boshiga  

bitta qadam bilan intiladi. Ushbu usulning qulayligi u nafaqat ro’yhatda, balki 

tartiblanmagan massivda ham  samarali  ishlaydi  (sababi  faqatgina  ikkita  

yonma-yon  turgan  element  o’rin almashtiriladi).  Bu usulda uchta ko’rsatkichdan 

foydalanamiz (2.3-rasm):   

p – ishchi ko’rsatkich  

q – yordamchi ko’rsatkich, p dan bitta qadam orqada bo’ladi  

s – yordamchi ko’rsatkich, p dan ikkita qadam orqada bo’ladi     

 

2.3-rasm.  Transpozitsiya  usuli  bilan  ro’yhatni  qayta  tartibga  keltirish  Biz  



tomonimizdan  topilgan  uchinchi  element  ro’yhat  boshiga  bir  qadam suriladi  

(ya’ni    ikkinchi    bo’lib    qoladi).    Birinchi    element    ko’rsatkichi    uchinchi 

elementga    joylashtiriladi,    ikkinchi    element    ko’rsatkichi    to’rtinchi,    shunday  

qilib  uchinchi  element  ikkinchi  joyga  joylashib  qoladi.  Agar  mazkur  elementga 

yana bir bor murojaat qilinsa, u holda u ro’yhat boshida bo’lib qoladi.  

node *s=NULL;  

node *q=NULL;  

node *p=table;  

while (p != NULL){  

    if (key == p->k){ //transponerlaymiz  

          if( q ==NULL){//o‘rinlashtirish shart emas    

            search=p;  

            exit(0);  

           }           




          q->nxt=p->nxt;  

          p->nxt=q;  

          if (s == NULL) table = p;  

          else s->nxt = p;  

    search=p;  

    exit(0);  

    }  

    s=q;  

    q=p;  

    p=p->nxt;  

}  

              search=NULL;   



              exit(0);  

Ishni bajarishga oid namuna 

Talabalar  ma’lumotlaridan  –  FIO  va  adresdan  iborat  jadval  berilgan.  Binar  

qidiruvdan  foydalanib  TTJ  da  yashaydigan  talabalar  ro’yhatini  hosil  qiling. 

Algoritm  

1. Jadvalga n ta talaba FIO va adreslarini kiritamiz.  

2.  Binar    qidiruvni    jadvalning    birorta    maydonida    amalga    oshirish    uchun 

jadvalni    shu    maydoni    bo’yicha    tartiblab    olish    kerak.    Shuning    uchun  

masalaning qo’yilishida  adresi  TTJ  bo’lgan  talabalarni  topish  kerakligi  sababli  

jadval  ma’lumotlarini    adres    maydoni    bo’yicha    saralab    olamiz.    Masalani  

yechishda to’g’ridan-to’g’ri tanlash orqali saralashdan foydalanilgan.  

3. key kalitga mos elementni izlash chegaralarini aniqlab olamiz. Dastlab u [0,n] 

oralig’ida, ya’ni low=0,hi=n.  

4. Agar low<=hi bo’lsa, oraliq o’rtasini hisoblaymiz. mid=(low+hi)/2  

5. Agar  mid  o’rnida  turgan  talaba  adresi  TTJ  bo’lsa,  element  topildi,  

search=mid va 7-qadamga o’tiladi, aks holda keyingi qadamga o’tiladi.  

6. Agar  “TTJ”  so’zi  alifbo  bo’yicha  mid  o’rnida  turgan  talaba  adresi  

qiymatidan kichik bo’lsa, izlash quyi chegarasi o’zgaradi, ya’ni mid o’rnida turgan  




elementdan bitta oldingi elementgacha olinadi, ya’ni hi=mid-1.  Aks holda, yuqori  

chegara  o’zgaradi  –  mid  dan  keyingi  elementdan  to  oxirgi  elementlar  oralig’i  

olinadi, ya’ni low=mid+1. 4-qadamga o’tiladi.  

7. Agar  topilgan  elementdan  oldin  turgan  elementning  (mid-1)  ham  adres 

maydoni  TTJ  bo’lsa,  search--,  ya’ni  bitta  oldingi  elementga  o’tamiz  va  shu 

qadamni boshidan bajaramiz. Aks holda keyingi qadamga o’tiladi. 8. Joriy  (search  

ko’rsatayotgan)  elementdan  boshlab  adresi  “TTJ”  ga  teng bo’lgan  talaba  

ma’lumotlarini  ekranga  chiqaramiz.  Agar  adresi  “TTJ”  dan  farq qiladigan 

talaba chiqib qolsa, algoritm tugallanadi.  


Yüklə 487,85 Kb.

Dostları ilə paylaş:
1   ...   12   13   14   15   16   17   18   19   ...   31




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin