Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari
REJA: KIRISH 1. Ma’lumotlar tuzilmasi, tuzilmalar ustida bajariladigan amallar. Dasturlash texnalogiyalari 2. Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari. 3. Ma lumotlar tuzilmasida satrli va belgili turlarni dasturlashtirish‟ 4. Dinamik xotiradan foydalanish, dinamik xotirani ishlatishda ko rsatkich turlari ‟ 5. Murakkab turlarni algoritmlashtirish va dasturlash. Vektorlar va massiv ma lumotlarini algoritmlashtirish ‟ 6. Struktura turi, struktura dasturlash va algoritmlash 7. Tartiblash va saralash masalalarini algoritmlashtirish. Ma lumotlarni ‟ tartibga solish turlari. Ma lumotlar tuzilmasini saralash usullari. ‟ 8. Qidiruv algoritmlari. Axborot izlashning asosiy tamoyillari. Kеtma-kеt izlash. Izlashning tеzlashtiririlgan usullari. 9. Algoritmlashtirishda graflar nazariyasi, graflarni algoritmlashtirish. 10. Kombinatorika elementlarini dasturlash va algoritmlashtirish XULOSA FOYDANILGAN ADABIYOTLAR
KIRISH Algoritm ijrochiga tushunarli bolishi uchun ijrochining imkoniyatlarini bilish lozim. Agar ijrochi inson bo’lsa, u holda algoritm insonning imkoniyatlaridan kelib chiqib tuzilishi kerak. Bunda ko‘zlangan maqsad va algoritmdan kelib chiqib inson tushunadigan til, insonning bilimi, hayotiy tajribasi, kasbiy malakasi, yoshi, qolaversa, jismoniy imkoniyatlari hisobga olinishi zarur. Agar ijrochi texnik vosita (masalan, kompyuter, elektron soat, dastgohlar) boMsa, u holda algoritm shu texnik vositaning imkoniyatlaridan kelib chiqib tuzilishi kerak. Inson hayoti davomida katta-kichik vazifalar yoki masalaiarni hal etishni o‘z oldiga maqsad qilib qo‘yadi. Odatda, u o‘z maqsadiga erishishi uchun bajarishi lozim bo'lgan amal yoki ishlarini hayotiy tajribasi yoki o'zlashtirgan bilimiga asoslanib ma'lum bir tartibga keltiradi. Bunga hayotimizdan xilmaxil misollar keltirish mumkin. 1 - misol Ko‘chadan o'tish maqsad qilib qo‘yilgan bo'lsin. IJ holda ko‘chadan o'tayotgan kishi hammamizga odatiy hol bo‘lib qolgan quyidagi harakatlarni bajarishi lozim bo'ladi: 1) chap tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 2- bandga o'tilsin, aks holda 1-bandga o'tilsin; 2) o‘ng tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa, 3- bandga o'tilsin, aks holda 1-bandga o'tilsin; 3) ko'chadan o'tilsin. Yuqoridagi misollarda keltirilgan amallar ketma-ketligi, boshqacha aytganda, ko'rsatmalar yoki buyruqlar ketma-ketligi biror kishi tomonidan bajarilgach, ko'zlangan maqsadga erishiladi. Bunday amallar ketma-ketligi yoki hayotimizda har kuni va har soatda uchrab turadigan turli qoidalar ichida biror zaruriy natijaga erishishga olib keladigan amallarni ketma-ket bajarishni talab etadigan qoidalar informatikaning asosiy tushunchalaridan biri algoritm so‘zi bilan ifodalanadi. Algoritm so‘zi IX asrda yashab (783-yilda tug‘ilgan) o‘z ilmiy ishlari xazinasi bilan dunyoga tanilgan vatandoshimiz buyuk astronom, matematik va geograf Abu Abdullo Muhammad ibn Muso al-Xorazmiy nomidan kelib chiqqan. Al-Xorazmiy arifmetikaga bag‘ishlangan «Hind hisobi haqida kitob» risolasida
to‘qqizta hind raqamining sonlarni ifodalashdagi afzalliklari va ular yordamida har qanday sonni ham qisqa va oson yozish mumkinligini aytadi va hozirgi kunda hamma o‘quvchilar biladigan sonlar ustida, yuqoridagi 3-misoldagi kabi ustun ko'rinishida amallar bajarish qoidalarini yoritadi. Ayniqsa, nol (0) qo‘llashning ahamiyati haqida tushuncha berib, nolni yozmaslik natijaning xato chiqishiga olib keladi, degan. Bu risola XII asrda Ispaniyada lotin tiliga tarjima qilingan va butun Yevropaga tarqatilgan. Bu tarjimaning XIV asrda ko'chirilgan qoLyozmasi ning yagona nusxasi Kembrij universitetining kutubxonasida saqlanmoqda. Risola «Dixit Alxhorithmi», ya’ni oDediki aiXorazmiy» iborasi bilan boshlanadi. Algoritm deganda, biror maqsadga erishishga qaratilgan ijrochi bajarishi uchun mo'ljallangan ko‘rsatma (buyruq)laming aniq, tushunarli va chekli ketma- ketligi tushuniladi. Bu algoritm tushunchasining matematik ta'rifi boMmasa ham intuitiv ma'noda algoritmning mazmunini ochib beruvchi tavsifidir. Algoritmni intuitiv ma’noda bir necha misollarda izohlaymiz. Biror-bir narsani taqiqlovchi qoidalar algoritm boMolmaydi, masalan: «Chekish mumkin emas», «Begonalarning kirishi taqiqlanadi», «Kirish», «Chekish uchun joy» kabi birorbir narsaga ruxsat etuvchi qoidalar ham algoritmga xos emas. Lekin «Svetoforni yashil rangida o‘ting» juda sodda bo'lsa ham algoritmdir. Demak, yuqorida keltirilgan misollardagi ko‘rsatmalar ketma-ketligi algoritm va bu algoritmlarni bajarayotgan inson — ijrochi boMar ekan. Algoritm ijrochisi faqat insonmi, degan savol berishingiz tabiiy. Bu savolga javob quyidagicha: Algoritm ijrochisi — algoritmda ko'rsatilgan buyruq yoki ko‘rsatmalarni bajara oladigan abstrakt yoki real (texnik yoki biologik) sistema. Ijrochi bajara olishi uchun algoritm unga tushunarli boMishi lozim. Algoritm ijrochi tushunadigan tilgagina emas, balki uning bilim va malakasiga ham mos boMishi kerak. Aks holda ijrochi birorta ham ko'rsatmani bajara olmasligi mumkin. Ijrochi bajara olishi mumkin boMgan ko‘rsatma yoki buyruqlar to‘plami ijrochining ko‘rsatmalar sistemasi deyiladi. Masalan, «16 sonidan kvadrat ildiz chiqarilsin» ko'rsatmasi 2-sinf o'quvchisining ko'rsatmalar sistemasiga tegishli boMmaydi, lekin 8-sinf o'quvchisining ko‘rsatmalar sistemasiga tegishli boMadi. 1. Ma’lumotlar tuzilmasi, tuzilmalar ustida bajariladigan amallar. Dasturlash texnalogiyalari Ma’lumotlar tuzilmasi — bu ma’lumotlarni samarali o’qish va o’zgartirish imkonini beruvchi, ma’lumotlarni saqlash va boshqarishning bir formatga solingan shaklidir.
Barcha dastur yoki dasturiy mahsulotning asosida ikkita birlik yotadi: ma’lumotlar va ular ustida qandaydir amallar bajaradigan algoritmlar. Algoritmlar ma’lumotlarni biz yoki dastur uchun foydali bo’lgan axborot ko’rinishiga keltirib beradi. Algoritmlar shu ma’lumotlar ustida amallarni (o’qish, yozish, yangilash, o’chirish) samarali va tez bajara olishi uchun biz shu ma’lumotlarni ma’lum bir strukturaga solgan holda saqlashimiz kerak bo’ladi. Demak shunday qilib, Quyida keltirilgan ma’lumotlar tuzilmalari dasturlashda eng ko’p qo’llaniladigan tuzilmalardir. Ularga: 1. Massiv (Array) 2. Bog’langan ro’yhat (Linked List) 3. Navbat (Queue) 4. Stek (Stack) 5. Hash jadvallar (Hash tables) 6. Daraxtlar (Trees) 7. Graflar (Graph) kiradi. Biz bu bo’limda boshidagi 5 ta tuzilma bilan yaqindan tanishib, ularning kuchli va kuchsiz tomonlari va ularni qanday holatlarda ishlatish ma’qulligi haqida gaplashib o’tamiz. Qolgan ikkita tuzilma murakkabroq bo’lib ular o’z ichida yana ko’plab turlarga bo’linib ketadi. Shuning uchun ularni keyinroqqa qoldiramiz. Bundan tashqari barcha tuzilmalarning hamma joyda ingliz tilidagi nomi
ishlatilgani va ularning nomi odatda tarjima qilinmaganligi sababli keyingi o’rinlarda men ularning asosan ingliz tilidagi nomlarini ishlataman. Turli xildagi ma’lumotlar tuzilmalari nima uchun kerak? Ma’lumotlar tuzilmalari nimaligi haqida qisman tasavvurga ega bo’ldingiz va ularning asosiy turlari bilan ham tanishib oldingiz. Lekin, shu joyga kelib agar sizda “Nima uchun ma’lumotlarning turli xil tuzilmalari kerak?” “Nima uchun bir turdagi universal ma’lumotlar tuzilmalaridan foydalanib qo’ya qolsa bo’lmaydi?” degan savol tug’ilmagan bo’lsa, bu yaxshi emas.) Keling endi shu savolga javob topishga harakat qilamiz. Undan oldin ma’lumotlar tuzilmalari ustida asosiy bajarilishi mumkin bo’lgan amallarni ko’rib chiqaylik. Bularga ma’lumotlarni : Ko’rib chiqish (Traversing) O’qib olish (Retrieving) Kiritish (Insertion) O’chirish (Deletion) Qidirish (Search) Saralash (Sorting) Birlashtirish (Merging) lar kiradi. Turli xildagi ma’lumotlar tuzilmalarida esa yuqoridagi amallar turlicha tezlikda amalga oshadi. Masalan oddiyroq misol olaylik, array uchun ma’lumotni o’qib olish uchun O(1) vaqt sarflansa, uni kiritish yoki o’chirish uchun O(n) vaqt sarflanadi. Linked listda esa bular aksincha. Shuning uchun, masalan, sizning dasturingizda ma’lumotlar ko’p kiritilib, o’chirilsayu lekin kam o’qilsa, bunda ma’lumotlarni saqlashda arraydan foydalangandan ko’ra linked list qulayroq hisoblanadi. Lekin, ko’pincha holatda bir necha ma’lumotlar tuzilmalarini o’zini birlashtirgan gibrid ma’lumotlar tuzilmalaridan ham foydalaniladi. 2. Algoritmlarni murakkablik darajalasining tahlili, murakkablik darajasini baholash usullari . Dasturni bajarish vaqti bajarilgan amallar soniga proportsionaldir. Albatta, vaqtning o'lchov birliklarida (sekundlar), u ham protsessorning tezligiga (soat chastotasiga) bog'liq. Algoritmning vaqt murakkabligi ko'rsatkichi nisbatan o'zgarmas bo'lishi uchun spetsifikatsiyalar kompyuter, u nisbiy birliklarda o'lchanadi. Odatda vaqt murakkabligi bajarilgan operatsiyalar soniga qarab baholanadi. An'anaga ko'ra, algoritmning murakkablik darajasini u foydalanadigan asosiy kompyuter resurslari miqdori bo'yicha baholash odatiy holdir: protsessor vaqti