Why Balanced Trees?
Nega muvozanatlangan daraxtlar kerak
"Binary Tree Basics" darsida biz {5, 3, 8, 1, 4} qiymatlarini qo'shdik va chiroyli, ikki tomonga teng taqsimlangan daraxt hosil bo'ldi. Lekin bir savol beraylik: agar qiymatlarni boshqa tartibda — masalan {1, 2, 3, 4, 5} — qo'shsak nima bo'ladi?
1 qo'shildi: 1
2 qo'shildi: 1 -> 2 (o'ngga)
3 qo'shildi: 1 -> 2 -> 3 (o'ngga, o'ngga)
4 qo'shildi: 1 -> 2 -> 3 -> 4 (o'ngga, o'ngga, o'ngga)
5 qo'shildi: 1 -> 2 -> 3 -> 4 -> 5 (...)Har bir yangi qiymat avvalgisidan katta bo'lgani uchun, u har doim o'ng tomonga tushadi — natijada daraxt "daraxt" bo'lishdan to'xtaydi va aslida oddiy bog'langan ro'yxatga aylanadi! Bu holatda "Binary Tree Basics" darsida ko'rgan tezlik afzalligi butunlay yo'qoladi: qidirish endi har qadamda yarmini emas, faqat bittasini kamaytiradi — bu "Linked List" darsida ko'rgan sekin, ketma-ket qidirishning aynan o'zi.
Bu muammoni hal qilish uchun muvozanatlangan daraxtlar (balanced trees) ixtiro qilingan — ular har bir qo'shishdan keyin o'z tuzilishini avtomatik "tekislab" turadi, shunday qilib chap va o'ng tomonlar hech qachon bir-biridan juda ko'p farq qilmaydi. Eng mashhur turlaridan biri — AVL Tree (keyingi darsda ko'rasiz): har bir tugunda chap va o'ng balandlik farqi ko'pi bilan 1 bo'lishini kafolatlaydi, va bu shartga rioya qilinmasa, daraxt o'zini avtomatik "aylantirib" (rotation) qayta tartiblaydi.
Bu — nazariy emas, amaliy muammo: agar siz sortlangan (tartiblangan) ma'lumotni oddiy BST'ga ketma-ket qo'shsangiz, dasturingiz sekinlashib qoladi — va bu xato ko'pincha faqat production'da, katta ma'lumot bilan ishlaganda seziladi, kichik testlarda emas.
Key Takeaway
Key Takeaway:
Tartiblangan tartibda qo'shilgan qiymatlar oddiy ikkilik qidiruv daraxtini bog'langan ro'yxatga aylantirib, uning tezlik afzalligini yo'qqa chiqaradi — muvozanatlangan daraxtlar (masalan AVL) buni avtomatik oldini oladi.
NEXT UP
AVL Trees