B daraxtiga kirish algoritmi , b daraxtida element qo‘shish va o‘chirish algoritmi

Mavzu:  “B DARAXTIGA KIRISH ALGORITMI ,  B DARAXTIDA ELEMENT QO`SHISH VA
O`CHIRISH ALGORITMI “
MUNDARIJA
KIRISH ………………………………….. ……………………………………………………………………….
Asosiy qism
1-BOB
B DARAXTLAR …………………………………………………….………………………………………….
B Daraxt tarifi ………………………………………..........….............. ………………………………
B Daraxt strukturasi….………………………………………………… ………………………………….
2-BOB.
B DARAXTDA  AMALLAR ………………………......................……. …………………………….
2.1 B Daraxtda izlash algoritmi ……………………………………….. …………………………….
2.2 B Daraxtda qo`shish algoritmi ………………………………….… ……………………………
2.3 B Daraxtda o`chirish algoritmi ……………………..….………… …………………………….
XULOSA ……………………….......………………………………….. ……………………………………….
FOYDALANILGAN ADABIYOTLAR ………………...………………. ………………………………….
1 KIRISH
“Algoritm   MS”   fanining   bosh   maqsadi   talabalarga   qo‘yilgan   tatbiqiy   masalani
anglash,   echish   algoritmini   ishlab   chiqish   va   dasturiy     ta’minotini     yaratish
asoslarini o‘rgatishdir. Shu maqsadda mazkur o‘quv qo‘llanmada bu fanning kichik
bir   qismi   bo`lgan   B   daraxtlarning,   usullari   va   algoritmlar   yaratish   asoslari   hamda
kompyuterda   masalalarni   echish   uchun   C++   dasturlash   tilining   tayanch
tushunchalari keltirilgan. 
        B-daraxt   Ushbu   qo'llanmada   siz   B-daraxt   nima   ekanligini   bilib
olasiz.   Shuningdek,   siz     C++   tilida   B-daraxtda   qidiruv   operatsiyasining   ishchi
misollarini topasiz.
         B-daraxt - bu o'z-o'zini muvozanatlashtiruvchi qidiruv daraxtining maxsus turi
bo'lib,   unda   har   bir   tugun   bir   nechta   kalitni   o'z   ichiga   olishi   va   ikkitadan   ortiq
avlodga   ega   bo'lishi   mumkin.   Bu   ikkilik   qidiruv   daraxtining   umumlashtirilgan
shaklidir   .U   balandlikda   muvozanatlangan   m-yo'l   daraxti   sifatida   ham   tanilgan
B-daraxt
Nima uchun sizga B-daraxt ma'lumotlar tuzilmasi kerak?
            B-daraxtga bo'lgan ehtiyoj qattiq disk kabi jismoniy saqlash vositalariga kirish
uchun   kamroq   vaqt   talabining   ortishi   bilan   paydo   bo'ldi.   Ikkilamchi   saqlash
qurilmalari   katta   sig'im   bilan   sekinroq.   Diskga   kirishni   minimallashtiradigan
bunday turdagi ma'lumotlar tuzilmalariga ehtiyoj bor edi.
        Ikkilik   qidiruv   daraxti,   avl   daraxti,   qizil-qora   daraxt   va   boshqalar   kabi   boshqa
ma'lumotlar tuzilmalari bitta tugunda faqat bitta kalitni saqlashi mumkin.   Agar siz
ko'p sonli kalitlarni saqlashingiz kerak bo'lsa, unda bunday daraxtlarning balandligi
juda katta bo'ladi va kirish vaqti ortadi.
2    Biroq, B-daraxt ko'plab kalitlarni bitta tugunda saqlashi va bir nechta tugunlarga
ega   bo'lishi   mumkin.   Bu   balandlikni   sezilarli   darajada   pasaytiradi,   diskka   tezroq
kirish imkonini beradi.
Asosiy qismi
1-BOB
B daraxt tarifi
           B daraxti (inglizcha B-tree) – izlash, qo'shish va o'chirish imkonini beradigan,
juda   koʻpshoxli   muvozanatlashgan   qidiruv   daraxti.   Tugunlari   n   bo'lgan   B   daraxti
O(logn) balandlikka ega boladi. Tugun shoxlari soni bittadan bir necha minggacha
bo'lishi   mumkin   (odatda,   B-daraxtining   shoxlanish   darajasi   daraxt   ishlaydigan
qurilma (disklar) xususiyatlari bilan belgilanadi). B-daraxtlar O(logn) ko'p dinamik
to'plam amallarini o'z vaqtida bajarish uchun ham ishlatilishi mumkin.
           B  daraxti  birinchi marta 1970-yilda R. Bayer  va E.Makkreyt  tomonidan taklif
qilingan.
          B   daraxt   strukturasi.   B   daraxti   mukammal   muvozanatlashgan,   ya'ni   uning
barcha barglarining chuqurligi bir xil. B daraxti quyidagi xususiyatlarga ega ( t – bu
daraxt parametrlari, B daraxtining minimal darajasi deyiladi, 2 dan kam emas ):
        Ildizdan tashqari har bir tugun hech bo'lmaganda t-1 kalitni o'z ichiga oladi va
har   bir   ichki  tugun   kamida   avlodli   t   tugunlarga  ega.   Agar   daraxt   bo'sh   bo'lmasa,
ildizda kamida bitta kalit bo'lishi kerak.
             Har bir tugun, ildizdan tashqari, ichki tugunlarda ko'pi bilan 2t - 1 kalitni va
ko'pi bilan 2t avlodni o'z ichiga
oladi
        Ildizda daraxt bo'sh bo'lmasa bittadan 2t-1 gacha
kalit va balandligi 0 dan katta bo'lsa 2 dan 2t gacha avlodni o'z ichiga oladi.
         Daraxtning har bir tugunida k1, ..., kn kalitlari bo'lgan barglardan tashqari n +
1 avlodlari
bor. i-avlodda [ki-1; ki], k0 = -∞, kn+1 =∞ kesmaning kalitlari mavjud.
         Har bir tugunning kalitlari kamaymaydigan tartibda tartiblangan.
        Barcha barglar bir xil darajada.
          B   daraxtlar   disklarda   (fayl   tizimlarida)   yoki   boshqa   to'gʻridan-to'gʻri   kiruvchi
bo'lmagan   saqlash   muhitlarida,   shuningdek,   ma'lumotlar   bazalarida   foydalanish
3 uchun mo'ljallangan. B daraxtlar qizil-qora daraxtlarga o'xshaydi, lekin ular diskni
o'qish/yozish amallarini minimallashtirishda yaxshiroq hisoblanadi.
        Daraxtlar - bu dinamik to'plam amallarni bajaradigan ma'lumotlar tuzilmalari.
Bunday amallar sifatida elementni qidirish, minimal (maksimal) elementni
qidirish,   kiritish,   o'chirish,   avlod-ajdodga   o'tish,   avlodga   o'tish   kabilarni   keltirish
mumkin.   Shunday   qilib,   daraxt   oddiy   lugʻat   sifatida   ham,   ustivor   navbat   sifatida
ham   ishlatilishi   mumkin.   Daraxtlardagi   asosiy   amallar   uning   balandligiga
mutanosib   vaqtda   bajariladi.   Muvozanatlashgan   daraxtlar   ularning   balandligini
kamaytiradi   (masalan,   tugunlari   bo'lgan   ikkilik   muvozanatli   daraxtning   balandligi
logn).
            Bu   standart   qidiruv   daraxtlarida   qanday   muammo   bor?   Oldingi   mavzularda
aytib   o'tilgan   daraxtlardan   biri   tasvirlangan   ulkan   ma'lumotlar   bazasini   ko'rib
chiqaylik.   Shubhasiz,bu   daraxtlarning  barchasini  tezkor   xotirada  saqlay   olmaymiz
–   ma'lumotlarning   faqat   bir   qismini   saqlaymiz,   qolganlari   uchinchi   tomon
vositasida saqlanadi kirish tezligi ancha past bo'lgan qattiq diskda). Qizil-qora yoki
Dekart kabi daraxtlar uchinchi tomon vositalariga kirishni talab qiladi. Katta n lar
uchun   bu   juda   ko'p.   Aynan   mana   shu   muammo   B   daraxtlar   hal   qilish   imkonini
beradi.
            B   daraxtlari   ham   muvozanatlashgan   daraxtlardir,   shuning   uchun   standart
amallarni     bajarish   uchun   vaqt   balandlikka   mutanosib.   Ammo,   boshqa
daraxtlardan farqli o'laroq, ular maxsus disk xotirasi bilan ishlash uchun yaratilgan
(oldingi misolda - uchinchi tomon tarqatuvchi), aniqrogʻi
ular kirish -chiqish turidagi murojaatlarni kamaytiradi.
1.2. B daraxtda amallar
B daraxtda izlash algoritmi .
            B-daraxtdagi   elementni   qidirish   ikkilik   qidiruv   daraxtidagi   elementni
qidirishning   umumlashtirilgan   shaklidir.   Quyidagi   bosqichlar   bajariladi.   Ildiz
tugunidan boshlab, k ni tugunning birinchi kaliti bilan solishtiring. Agar bo'lsa   k =
the   first   key   of   the   node,   tugun   va   indeksni   qaytaring.   Agar   bo'lsa   k.leaf   =   true,
qaytingNULL(ya'ni   topilmadi).   Agar   bo'lsa   k   <   the   first   key   of   the   root   node,   bu
kalitning   chap   bolasini   rekursiv   ravishda   qidiring.   Agar   joriy   tugunda   bir   nechta
kalit   bo'lsa   va   k   >   the   first   keyk   ni  tugundagi   keyingi   kalit   bilan   solishtiring.   Agar
bo'lsa   k   <   next   key,   ushbu   kalitning   chap   bolasini   qidiring   (ya'ni,   k   birinchi   va
ikkinchi   tugmalar   orasida   joylashgan).
Aks holda, kalitning o'ng avlodini qidiring.
4 Bargga yetguncha 1-4-bosqichlarni takrorlang.
Qidiruv misoli
Keling,kalitni   k=173-darajali daraxtdan qidiramiz.  B-daraxt
1. K   ildizda   topilmaydi,   shuning   uchun   uni   ildiz   kaliti   bilan   solishtiring.   k   ildiz
tugunida topilmaydi
          
2. dan boshlab   k > 11, ildiz tugunining o'ng avlodiga o'ting. O'ng pastki daraxtga 
o`ting
5 3. k ni 16 bilan   k > 16solishtiring. Chunki, k ni keyingi 18 tugmasi bilan solishtiring.
 
4. Chapdan o'ngga tugmalar bilan solishtiring
5. dan   beri   k  <   18,  k  16  va  18 orasida yotadi.  16  ning  o'ng  avlodini  yoki  18 ning
chap avlodini qidiring. k 16 va 18 orasida joylashgan
 
6. k topilgan. k topilgan
   
6 Elementni qidirish algoritmi
BtreeSearch(x, k)
 i = 1
 while i ≤ n[x] and k ≥ keyi[x]        
    do i = i + 1
if i  n[x] and k = keyi[x]
    then return (x, i)
if leaf [x]
    then return NIL
else
    return BtreeSearch(ci[x], k)
        Turli   xil   B-daraxt   operatsiyalari   haqida   ko'proq   ma'lumot   olish   uchun   tashrif
buyuring. Yuqorida aytib o'tilganidek, B daraxti barcha standart qidirish, qo'shish,
o'chirish va hokazo amallarni bajaradi.
       B  daraxtida  izlash   binar   daraxtni  qidirishga  juda  o'xshaydi,  faqat   bu  yerda  biz
avlodga   yo'lni   2   variantdan   emas,   balki   bir   nechta   variantdan   tanlashimiz   kerak.
Aks holda, farqi bo'lmay qoladi. Quyidagi 1-rasmda 27-kalitni qidirish ko'rsatilgan.
Tasvirni koʻrib chiqaylik (va shunga mos ravishda standart qidirish algoritmi):
      Biz ildiz kalitlarini kerak bo'lguncha o'tamiz. Bu holda 31 ga yetdik.
      Bu  kalitning chap tomonidagi avlodga tushamiz.
         27   dan   kichik   boʻlgunga   qadar   yangi   tugunni   kalit   boʻyicha   izlaymiz.   Bunday
holda, biz 27 ni topdik va to'xtadik.
1-rasm.  B daraxtda izlash algoritmining bajarilishi
74           17      31
1        2        3 7   9   11   13   16
19      26      27
96     97     99      Izlash amali O(t*logt n) vaqtida bajariladi, bu yerda t - minimal
daraja. Bu yerda disk amallarini faqat O (logt n) da bajarishimiz muhim qismidir.
          B daraxtlarda element qoʻshish.   Izlashdan farqli o'laroq, qo'shish usuli ikkilik
daraxtga   qaraganda   ancha   murakkab,   chunki   yangi   barg   yaratish   va   unga   kalit
qo'yish   mumkin   emas,   chunki   B   daraxtining   xususiyatlari   buziladi.   Kalitni
allaqachon  to'ldirilgan  bargga kiritish  mumkin  emas. Tugunni ikkiga bo'lish  amali
kerak,   agar   barg   to'ldirilgan   bo'lsa,   unda   2t-1   kalit   bor   edi.   2   ga   t-1   ga   bo'lamiz
undan   kam   kalitlar   va   oxirgi   t-1   ajdod   tuguniga   o'tkaziladi.   Shunga   ko'ra,   agar
avlod-ajdod tuguni ham to'lgan bo'lsa, yana bo'lishimiz kerak va shunga o'xshash
ildizgacha   (agar   ildiz   ajralgan   bo'lsa,   unda   yangi   ildiz   paydo   bo'ladi   va   daraxt
chuqurligi   oshadi).   Oddiy   ikkilik   daraxtlar   singari,   joylashtirish   ham   ildizdan
barggacha   bir   o'tishda   amalga   oshiriladi.Har   bir   iteratsiyada   (yangi   kalit   uchun
pozitsiyani qidirishda - ildizdan barggacha) o'tadigan barcha to'ldirilgan tugunlarni
ajratamiz (bargni ham o'z ichiga olgan holda). Shunday qilib, agar natijada tugunni
ajratish zarur bo'lsa, uning avlod-ajdodi to'ldirilmaganligiga koʻrishimiz mumkin.
     Quyidagi 2-rasmda xuddi o'sha daraxt qidirilmoqda (t = 3). Faqat hozir biz "15"
kalitini qo'shamiz. Yangi kalitning o'rnini qidirib,
a)
                                       6
b)
2-rasm. B daraxtlarda element qoʻshish algoritmining bajarilishi
81        2        3 7   9   11   13   16
19      26      27
96     97     994           17      31
4      11     17      31
1        2        3
7       9    19      26      27
96     97     9913   15   16 tugallangan   tugunga   duch   kelamiz   (7,   9,   11,   13,   16).   Algoritmga   amal   qilib,   uni
ajratdik - bu holda "11" avlod-ajdod tuguniga o'tadi va manba 2 ga bo'linadi. Keyin
"15" tugmasi ikkinchi "ajratish" tuguniga kiritiladi. Bu holda B daraxtining barcha
xususiyatlari saqlanib qolgan.
     Element qo'shish amali ham O (t logt n) vaqtda bajariladi. Shunga qaramay, biz
diskdagi amallarni faqat O (h) da bajaramiz, bu yerda h - daraxt balandligi.
     Element oʻchirish . Kalitni B daraxtidan olib tashlash, unga element qoʻshishdan
ham   murakkab   hisoblanadi.   Buning   sababi   shundaki,   ichki   tugunni   olib   tashlash
daraxtni   umuman   qayta   tiklashni   talab   qiladi.   Element   qoʻshishga   o'xshab,   biz   B
daraxtning   xususiyatlarini   saqlaganligimizni   tekshirishimiz   kerak,   faqat   bu   holda
biz   kalitlarning   t-1   bo'lishini   kuzatishimiz   kerak   (ya'ni,   agar   bu   tugundan   kalit
o'chirilsa, tugun mavjud bo'la olmaydi). O'chirish algoritmini ko'rib chiqamiz:
     Agar bargdan o'chirish sodir bo'lsa, unda qancha kalit borligini tekshirish kerak.
Agar t-1  dan  ko'p bo'lsa, biz shunchaki o'chirib  tashlaymiz  va  boshqa  hech narsa
qilishimiz shart emas. Aks  holda, agarda t-1  dan ortiq kalitlarni o'z  ichiga oluvchi
qo'shni   barg   bo'lsa   (uning   yonida   joylashgan   va   avlod-ajdodi   bir   xil   bo'lsa),   biz
qo'shni   tugunning   qolgan   kalitlari   orasidagi   ajratuvchi   bo'lgan   bu   qo'shnidan
kalitni tanlaymiz. Bu kalit k1 bo'lsin. Avval tugunni va uning qo'shnisini ajratuvchi
asosiy   tugundan   k2   kalitini   tanlaymiz.   Kerakli   kalitni   manba   tugundan   olib
tashlaylik (o'chirilishi kerak edi), bu tugunga k2 ni tushiring va ajdod tugunidagi k2
o'rniga  k1  qo'ying.  Tushunarli  bo'lishi uchun   quyida  "9" tugmasi  o'chirilgan  rasm
(3   -rasm)   ko'rsatilgan.   Agar   bizning   tugunning   barcha   qo'shnilarida   t-1   kalitlari
bo'lsa.   Keyin   biz   uni   qo'shnisi   bilan   birlashtiramiz,   kerakli   kalitni   o'chirib
tashlaymiz   va   bu   ikkita"sobiq"   qo'shnilar   uchun   ajratuvchi   bo'lgan   avlod-ajdod
tugunining   kaliti,   yangi   tashkil   etilgan   tugunimizga   o'tamiz   (bu,   albatta,   undagi
mediana bo'ladi).
3-rasm. B daraxtda element oʻchirish algoritmining bajarilishi
94      11     17      31
1        2        3 7       9    19      26      27
96     97     9913   15   16           2)   Endi   x   ichki   tugunidan   k   kalitini   olib   tashlashni   ko'rib   chiqaylik.   Agar   k
kalitidan oldingi avlod tugunida t -1 dan ortiq kalitlar bo'lsa, biz k1 ni topamiz - bu
tugunning pastki daraxtida k. Uni o'chirib tashlaymiz (Algoritmni
rekursiv   tarzda   ishga   tushiramiz).   Manba   tugundagi   k   ni   k1   bilan   almashtiramiz.
Agar   k   kalitidan   keyingi   avlod   tugunida   t-1   dan   ortiq   kalit   bo'lsa,   biz   ham   xuddi
shunday   ishni   bajaramiz.   Agar   ikkalasida   ham   (keyingi   va   oldingi   avlod
tugunlarida)   t-1   kalitlari   bo'lsa,   biz   bu   avlodlarni   birlashtiramiz,   k-ni   ularga
o'tkazamiz,   so'ngra   k-ni   yangi   tugundan   olib   tashlaymiz   (biz   algoritmimizni
rekursiv   tarzda   ishga     tushiramiz).   Agar   ildizning   oxirgi   2   avlodi   birlashsa,   ular
ildizga   aylanadi   va   oldingi   ildiz   olib   tashlanadi.   Rasm   quyida   koʻrsatilgan   (49-
rasm),   bu   yerda   "11"   ildizdan   chiqariladi   (keyingi   tugunda   t-1   avlodlari   ko'p
bo'lgan holat).
          O'chirish   jarayoni   O   (t   logt   n)   qo'shilishi   bilan   bir   xil   vaqtni   oladi   va   disk
operatsiyalari faqat O (h) talab qilinadi, bu yerda h - daraxt balandligi.
4-rasm. B daraxtda element oʻchirish algoritmining bajarilishi
B-daraxtni realizatsiya qilish
/* B-daraxtning minimum darajasi*/
#define T 2 /* 2-3-4 B-tree */
struct btree { int leaf;
int nkeys;
int *key;
int *value;
struct btree **childj  };
B-daraxtni hosil qilish
struct btree *btree_create()
104      11     17      31
1        2        3
7       9    19      26      27 96     97     99
13   15   16 {
struct btree *node;
node = malloc(sizeof(*node));
node->leaf = 1;
node->nkeys = 0;
node->key   =   malloc(sizeof(*node->key)   *   137   2   *   T   -   1);   node->value   =
malloc(sizeof(*node->value) 2 * T - 1); node->child = malloc(sizeof(*node->child)
2 * T);
return node;
}
B daraxtda element izlash
void btree_lookup(struct btree *tree, int key, struct btree **node, int *index)
{
int i;
for (i = 0; i < tree->nkeys && key > tree->key[i]; )
{
i++;
}
if (i < tree->nkeys && key == tree->key[i])
{
*node = tree;
index = I;
return;
}
if (!tree->leaf) {
/* Disk read tree->child[i] */
btree_lookup(tree, key, node, index);
}
11 else {
*node = NULL;
}
B daraxtda element qoʻshish
struct btree *btree_insert(struct btree *tree, int key, int value)
{
struct btree *newroot;
if (tree == NULL)
{
tree = btree_create();
tree->nkeys = 1;
tree->key[0] = key;
tree->value[0] = value; return tree;
}
if (tree->nkeys == 2 * T - 1)
{
newroot = btree_create(); /* Create empty root */
newroot->leaf = 0;
newroot->child[0] = tree;
btree_split_node(tree, newroot, 0);
return btree_insert_nonfull(newroot, key, value);
}
return btree_insert_nonfull(tree, key, value);
}
B-daraxtda tugunni ajratish
void btree_split_node(struct btree *node, struct btree *parent, int index)
{
12 struct btree *z;
int i;
z = btree_create();
z->leaf = node->leaf;
z->nkeys = T - 1;
for (i = 0; i < T - 1; i++)
{
z->key[i] = node->key[T + i];
z->value[i] = node->value[T + i];
}
if (!node->leaf)
{
for (i=0; i<T; i++;)
z->ichild[i] = node->child[i + T]j
}
node->nkeys = T - 1;
/* Ajdod tugunga mediana kalitni kiritish */
for (i = parent->nkeys; i >= 0 && i <= index + lj i--)
parent->child[i + 1] = parent->child[i];
parent->child[index + 1] = z;
for (i = parent->nkeys - 1; i >= 0 && i <= index; i--)
parent->key[i + 1] = parent->key[i];
parent->value[i + 1] = parent->value[i];
}
parent->key[index] = node->key[T - 1];
parent->value[index] = node->value[T - 1];
parent->nkeys++;
13 struct btree *btree_insert_nonfull( struct btree *node, int key, int value)
{
int i;
i = node->nkeys;
if (node->leaf)
{ for (i = node->nkeys - 1; i > 0 && key < node->key[i]; i--) {
node->key[i + 1] = node->key[i]
}
node->key[i + 1] = key;
node->nkeys++;
}
Else
{
for (i = node->nkeys - 1; i > 0 && key < node->key[i];
{
i--;
}
i++;
if (node->child[i]->nkeys == 2 * T - 1)
{
btree_split_node(node->child[i], node, i);
if (key > node->key[i])
i++J        }
node = btree_insert_nonfull(node->child[i], key, value);
}
return node;
}
14 int main()
{
struct btree *tree; tree = btree_insert(NULL, 3, 0);
tree = btree_insert(tree, 12, 0);
tree = btree_insert(tree, 9, 0);
tree = btree_insert(tree, 18, 0);
return 0;
}
15 XULOSA
         Men bu qo`llanmani yoza turib juda qiziqarli ko`plab malumotlarga uchradim
misol   uchun     grafiklar   bilan   tushuntirilgan   algoritmlar     algoritmlarning   dastur
shaklida ko`rinishi bu algoritm kelib chiqish tarixi va h k
        B   daraxti   (inglizcha   B-tree)   –   izlash,   qo'shish   va   o'chirish   imkonini   beradigan,
juda koʻpshoxli muvozanatlashgan qidiruv daraxti ekan.
        Tugunlari   n   bo'lgan   B   daraxti   O(logn)   balandlikka   ega   bolishini   bilib   oldim.
Tugun   shoxlari   soni   bittadan   bir   necha   minggacha   bo'lishi   mumkin   bo`lgan   bu
daraxt   (odatda,   B-daraxtining   shoxlanish   darajasi   daraxt   ishlaydigan   qurilma
(disklar) xususiyatlari bilan belgilanadi). B-daraxtlar O(logn) ko'p dinamik to'plam
amallarini o'z vaqtida bajarish uchun ham ishlatilishi mumkin.
          B   daraxti   birinchi   marta   1970-yilda   R.   Bayer   va   E.Makkreyt   tomonidan   taklif
qilingan ekan.
     Agar bargdan o'chirish sodir bo'lsa, unda qancha kalit borligini tekshirish kerak.
Agar t-1  dan  ko'p bo'lsa, biz shunchaki o'chirib  tashlaymiz  va  boshqa  hech narsa
qilishimiz shart emas. Aks  holda, agarda t-1  dan ortiq kalitlarni o'z  ichiga oluvchi
qo'shni   barg   bo'lsa   (uning   yonida   joylashgan   va   avlod-ajdodi   bir   xil   bo'lsa),   biz
qo'shni   tugunning   qolgan   kalitlari   orasidagi   ajratuvchi   bo'lgan   bu   qo'shnidan
kalitni tanlaymiz. Bu kalit k1 bo'lsin. Avval tugunni va uning qo'shnisini ajratuvchi
asosiy   tugundan   k2   kalitini   tanlaymiz.   Kerakli   kalitni   manba   tugundan   olib
tashlaylik (o'chirilishi kerak edi), bu tugunga k2 ni tushiring va ajdod tugunidagi k2
o'rniga k1 qo'ying. 
             Kalitni B daraxtidan olib tashlash, unga element qoʻshishdan ham murakkab
hisoblanadi. Buning sababi shundaki, ichki tugunni olib tashlash daraxtni umuman
qayta   tiklashni   talab   qiladi.   Element   qoʻshishga   o'xshab,   biz   B   daraxtning
xususiyatlarini   saqlaganligimizni   tekshirishimiz   kerak,   faqat   bu   holda   biz
kalitlarning   t-1   bo'lishini   kuzatishimiz   kerak   (ya'ni,   agar   bu   tugundan   kalit
o'chirilsa, tugun mavjud bo'la olmaydi).
      Bu narsalarni biz bu qo`llanmada topishimiz mumkin bo`ladi B daraxt bo`yicha
ko`pdan ko`p malumotlar tuzilmasi bor  bu qo`llanmani yasayotib  o`zimga kerakli
anchagina malumotlarni bilib oldim
16     
        
FOYDALANILGAN ADABIYOTLAR
O’zbekiston   Respublikasi   Birinchi   Prezidentining   “Zamonaviy   axborot-
kommunikatsiya   texnologiyalarni   yanada   joriy   etish   va   rivojlantirish   chora-
tadbirlari to’g’risida”gi PQ-1730-sonli Qarori. 2012-y., 21 mart.
Thomas   H.   Cormen,   Charles   E.   Leiserson,   Ronald   L.   Rivest,   Clifford   Stein
Introduction   to   Algorithms.   Third   Edition.   The   MIT   Press   Cambridge,
Massachusetts London, England, 2009. – 1312 p.
Scheinerman   Edwant   C++   for   Mathematicians.   An   Introduction   for   Students   and
Professionals.   Chapman&Hall/CRC,   Taylor&Francis   Group,   LLC,   Boc а   Raton,
London, New York, 2006. - 496 p.
D.S. Malik C++ Programming: From Problem Analysis to Program Design. Seventh
Edition. Course Technology, 2014.-1488 p.
Герберд   Шилдт   С ++ базовый   курс .3- е   издание .   Перевод с англ. –М.: Изд. дом
«Вильямс», 2010. - 624 c.
Культин   Н.Б.   С++Builder   в   задачах   и   примерах.   -СПб.:   БХВ-Петербург,   2005.   -
336 с.
Madraximov   Sh.F.,   Ikramov   A.M.,   Babajanov   M.R.   C++   tilida   programmalash
bo’yicha   masalalar   to’plami.   O’quv   qo’llanma.   T.,   O’zbekiston   Milliy   universiteti,
“Universitet” nashriyoti, 2014. - 160 b.
17 18 19 20