Ma'lumotlar tuzilmalarini doimiyga o'tkazish usullari
1 Mundarija I Kirish ………… … …… …… …………………… …...…... ………… ……… .2 II Asosiy qism …………………………………..…… …………………… ..3 2.1 Ma'lumotlar tuzilmalarini doimiyga o'tkazish usullari … ………….… ..3 2.2 Doimiy to'plam … ……………………………………………………... .8 23 Doimiy navbat ……………………………………… ……………… … 13 2. 4 Doimiy pastki ………………………………………………………... .24 2.5 Doimiy ustuvor navbat ……………………………………………….. .29 III Xulosa ………………………………………………… ……………… … 38 IV Foydalanigan adabiyotlar …………………………… ……………... 39
2 Kirish Doimiy ma'lumotlar strukturasi - har qanday o'zgartirishl ar kiritilganda o'zining avvalgi holatini va ushbu holatlarga kirish huquqini saqlab qolgan ma'lumotlar tuzilmasi. To'liq doimiy ma'lumotlar tuzilmalarida siz nafaqat oxirgi, balki ma'lumotlar tuzilmalarining istalgan versiyasini o'zgartirishingiz mumkin, shuningdek, istalgan versiyaga so'rovlar qilishingiz mumkin. Birlashtirilgan ma'lumotlar tuzilmalari ikkita ma'lumotlar tuzilmasini bittaga (birlashtirilishi mumkin bo'lgan qidiruv daraxtlari) birlashtirishga imkon beradi. Funktsional ma'lumotlar tuzilmala ri ta'rifi bo'yicha to'liq barqarordir, chunki ular halokatli topshiriqlarga ruxsat bermaydi, ya'ni. har qanday o'zgaruvchiga faqat bir marta qiymat berilishi mumkin va uni o'zgartirib bo'lmaydi. Agar ma'lumotlar strukturasi funksional bo'lsa, u holda u qo 'shiladi, agar u qo'shilgan bo'lsa, u butunlay doimiy, agar u to'liq doimiy bo'lsa, u ham qisman doimiydir. Shu bilan birga, funktsional emas, balki birlashuvchi ma'lumotlar tuzilmalari mavjud.
3 2.1 Ma'lumotlar tuzilmalarini doimiyga o'tkazish usullar i Ha r qanday tuzilmani barqaror qilishning bir necha yo'li mavjud: to'liq zaxira nusxasi (ingl. full copy ) har qanday o'zgartirish operatsiyasi uchun ma'lumotlar strukturasi to'liq nusxalanganda, natijada yangi nusxa o'zgartiriladi, yuqoriga yo'l (ingliz. Pat h copying ), fat node usuli . Qisman qat'iyat bilan boshlaylik. Aniqlik uchun ma'lumotlar tuzilmalarining turli versiyalarini raqamlaymiz. Ma'lumotlar strukturasidagi o'zgarishlar tarixi chiziqli bo'lib, istalgan vaqtda ma'lumotlar strukturasining istalgan versiyasiga murojaat qilishingiz mumkin, lekin faqat oxirgi versiyasini o'zgartirish mumkin (u rasmda ko'k rang bilan ta'kidlangan) (1 -rasm) . 1-rasm Keling, ma'lumotlar strukturasi nima ekanligini aniqlaylik. Bizning tushunchamizda ma'lumotlar strukturas i ba'zi ma'lumotlar saqlanadigan va bu tugunlar havolalar bilan bog'langan tugunlar to'plami deb ataladi. Ma'lumotlar strukturasiga misol daraxtdir . Keling, yo'lni nusxalash orqali daraxtni qanday qilib barqaror qilishni ko'rib c hiqaylik. Yo'ldan nusxa ko'chirish usuli Bir bor bo'lsin muvozanatli qidiruv daraxt . Undagi barcha operatsiyalar uchun baja riladi O ( h ), qayerda h - daraxtning balandligi va daraxtning balandligi O ( logn ), qayerda n -uchlari soni. Aytaylik, bu muvozanatli daraxtda qandaydir yangilanishni amalga oshirish kerak, masalan, boshqa element qo'shing, lekin ayni paytda eski darax tni yo'qotmaslik kerak. Yangi bola qo'shmoqchi bo'lgan
4 tugunni oling. Yangi tugunni qo'shish o'rniga, biz ushbu tugunni nusxalaymiz, nusxaga yangi bola qo'shamiz, shuningdek, barcha ko'rsatkichlar bilan birga birinchi ko'chirilgan tugunga erishish mumkin b o'lgan ildizgacha bo'lgan barcha tugunlarni nusxalaymiz. Biz o'zgartirilgan tugunga etib bo'lmaydigan barcha burchaklarga tegmaymiz. Yangi tugunlar soni har doim logarifm tartibida bo'ladi. Natijada, biz daraxtning ikkala versiyasiga kirish imkoniyatiga eg amiz (2 -rasm) . 2-rasm Biz muvozanatli qidiruv daraxtini ko'rib chiqayotganimiz sababli, muvozanatlash paytida cho'qqini yuqoriga ko'taramiz, siz aylanishlarda ishtirok etuvchi barcha cho'qqilarning nusxalarini yaratishingiz kerak, ular uchun bolalarga hav olalar o'zgartirildi. Bundaylar har doim uchtadan ko'p emas, shuning uchun asimptotiklar O ( log n ) azob chekmaydi. Balanslash tugagach, yo'l bo'ylab cho'qqilarning nusxalarini yaratib, ildizga ko'tarilish kerak. Bu o'zgartirganda, qo'shish operatsiyasi j uda qimmatga tushadi, chunki element boshqa barcha elementlardan kirish mumkin bo'lgan navbatning dumiga
5 qo'shiladi. Agar ma'lumotlar tuzilmasi ota -onaga havolalar mavjud bo'lsa, ushbu usuldan foydalanish foydali emas. Segmentlar daraxtini amalga oshirish Segment daraxtiga asoslanib, siz to'liq doimiy ma'lumotlar strukturasini yaratishingiz mumkin. Segmentlarning doimiy daraxtini amalga oshirish uchun daraxtning tuzilishini biroz o'zgartirish qulay. Buning uchun biz aniq mayoqlar foydalanish va bolalar uch un. Bundan tashqari, biz versiya segmentlari daraxtining ildiziga ishora qiladigan massiv yaratamiz Elementlardan doimiy segmentlar daraxtini yaratish uchun daraxtning so'nggi versiyasiga element qo'shish operatsiyasini qo'llash kerak . Daraxtning -th vers iyasiga yangi element qo'shish uchun siz uning to'liq ikkilik ekanligini tekshirishingiz kerak. Ha bo'lsa, unda yangi ildiz yarating, chap o'g'il qiling... Aks holda, biz asl nusxaning ildiz nusxasini yaratamiz. Keling, ildizlar qatorining oxiriga ildiz qo 'shamiz. Bundan tashqari, ildizdan birinchi bo'sh barggacha tushib, biz mavjud bo'lmagan tugunlarni yaratamiz va mavjudlarini klonlaymiz. Shundan so'ng, yangi filialda siz funktsiyaning qiymatini va bola elementlarining ba'zi ko'rsatkichlarini yangilashing iz kerak. Shuning uchun, rekursiyadan qaytib, biz bitta ko'rsatgichni yangi yaratilgan yoki ko'chirilgan cho'qqiga o'zgartiramiz, shuningdek, daraxt qurilgan funktsiyaning qiymatini yangilaymiz. Ushbu operatsiyadan so'ng, kiritilgan elementni o'z ichiga ol gan daraxtda yangi versiya paydo bo'ladi. Segmentlarning doimiy daraxtidagi elementni o'zgartirish uchun siz quyidagilarni qilishingiz kerak: daraxt bo'ylab kerakli versiyaning ildizidan kerakli elementga o'ting, uni nusxalang, qiymatni o'zgartiring va dar axt bo'ylab yuqoriga chiqing. , biz tugunlarni klonlaymiz. Bunday holda, oldingi klonlash paytida yaratilgan tugunga ko'rsatgichni bolalardan biriga o'zgartirish kerak. Ildizdan nusxa olgandan so'ng, ildiz qatorining oxiriga yangi ildiz qo'shing (3 -rasm) .