Algorithms and Complexity Analysis - Prof. Mo'minov, Thesis of Algorithms and Programming

An overview of algorithms, complexity analysis, and their importance in computer science. It discusses the concept of polynomial and exponential algorithms, the role of algorithms in solving problems, and the use of deykstra's algorithm for specific problems. The document also covers the importance of understanding algorithms for programming and problem-solving, and provides exercises for students to practice their understanding.

Typology: Thesis

2023/2024

Uploaded on 04/02/2024

zilola-pirimqulova
zilola-pirimqulova 🇺🇿

1 document

1 / 159

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
O’ZBEKISTON OLIY VA O’RTA MAXSUS TA’LIM VAZIRLIGI
SAMARQAND DAVLAT UNIVERSITETI
Mexanika-matematika fakulteti
«Axborotlashtirish texnologiyalari» kafedrasi
5140800 – «Amaliy matematika va informatika»
yo’nalishining 2-kurs talabalari uchun
Axadov Akmal Rustamovich
ALGORITMLAR NAZARIYASI
fani bo’yicha
Ma’ruzalar matni
SAMARQAND -2011
SUZ BOShI
Hozirgi kunda biror bir sohada ishni boshlash va uni boshqarishni kompyutersiz tasavvur qilish
qiyin. XXI asr savodxon kishisi bo’lishi uchun kompyuter savodxon bo’lish, axborot texnologiyalarini
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Partial preview of the text

Download Algorithms and Complexity Analysis - Prof. Mo'minov and more Thesis Algorithms and Programming in PDF only on Docsity!

O’ZBEKISTON OLIY VA O’RTA MAXSUS TA’LIM VAZIRLIGI

SAMARQAND DAVLAT UNIVERSITETI

Mexanika-matematika fakulteti «Axborotlashtirish texnologiyalari» kafedrasi

5140800 – « Amaliy matematika va informatika » yo’nalishining 2-kurs talabalari uchun

Axadov Akmal Rustamovich

ALGORITMLAR NAZARIYASI

fani bo’yicha

Ma’ruzalar matni

SAMARQAND -

SUZ BOShI

Hozirgi kunda biror bir sohada ishni boshlash va uni boshqarishni kompyutersiz tasavvur qilish

qiyin. XXI asr savodxon kishisi bo’lishi uchun kompyuter savodxon bo’lish, axborot texnologiyalarini

puxta egallamoq lozim. Har bir mutaxassis, u qaysi sohada ishlashdan qat’iy nazar, o’z vazifasini zamon

talabi darajasida bajarishi uchun axborotni ishlab chiqaruvchi vositalar va ularni ishlatish uslubiyotini

bilish va ishlash ko’nikmalarga ega bo’lishi zarur. Talabalarni ijtimoiy-iqtisodiy va ma’naviy

muammolarni hal etishga safarbar qilmoq uchun tegishli axborotlarni o’z vaqtida to’plab, qayta ishlab,

muayyan bir tartibga solish va zudlik bilan kishilarga etkazish kerak bo’ladi. Buning uchun jamiyatni

axborotlashtirish dasturini amalga oshirish va ilg’or axborot texnologiyasini joriy etish zarurdir.

Dasturlarni mustaqil tuzishdan maqsad kompyutеrga mutloq xokimlik qilish, ya’ni ish davomida

yuzaga kеladigan muammolarni tеzroq hal etish imkonini yaratishdir. Kompyutеr dasturlari sеrmеhnat

ishlarni avtomatlashtiradi, xatolarni kamaytiradi va mеhnat unumdorligini oshiradi. Bundan tashqari,

dasturlar tuzish juda ham mashg’ulotdir.

Dasturlarni yaratish jarayonida qo’yilgan masalaning yechish algoritmi dastlab to’g’ri ishlab

chiqilishi muhim axamiyatga ega. Shuning uchun algoritmlarni tuzish va dasturlarni ishlab chiqish bir-biri

bilan chambarchas bog’liq jarayonlardir. Oliy o’quv yurtlarining informatika, axborot tеxnologiyalari,

amaliy matеmatika kabi yo’nalishlarida ta’lim olayotgan talabalar algoritmni ishlab chiqish, dasturlar

yaratish, ularni sinash, sozlash, tahlil qilish uchun bilimlarni puxta o’zlashtirishlari zarur. Bunda, ta’lim

oluvchi uchun dasturlarni ishlab chiqishda asosiy va eng muhim bosqich hisoblangan algoritmlarni tuzish

va shular asosida dasturlar yaratish haqida ma’lumotlarni bеruvchi adabiyotlar kеrak.

Ma’ruzalar matni Oliy o’quv yurtlari talabalari uchun mo’ljallab yozilgan va zamonaviy

kompyutеr tеxnologiyalarini mustaqil ravishda o’rganayotgan barcha qiziquvchilar uchun ham foydalidir.

1 - MAVZU: KIRISH. ALGORITMLASH FANI VA ALGORITMLASH SAN’ATI

Algoritm tushunchasi zamonaviy matematika va informatikaning asosiy tushunchalaridan biri hisoblanadi. Algoritm termini o’rta asrlar ulug’ matematigi al-Xorazmiy nomidan kelib chiqqan. XX asrning 30-yiligacha algoritm tushunchasi ko’proq matematik ma’no emas, balki metodologik ma’noni kasb etar edi. Algoritm deganda, u yoki bu masalalar sinfini yechish imkonini beruvchi aniq ifodalangan chekli qoidalar majmui tushunilgan. EHM larning paydo bo’lishi bilan algoritm tushunchasi yanada keng tarqaldi. EHM va dasturlash usullarining rivojlanishi algoritmlarni ishlab chiqish avtomatlashtirishdagi zaruriy bosqich ekanligini tushunishga yordam berdi. EHM larning paydo bo’lishi algoritmlar nazariyasining rivojlanishiga olib keldi. Algoritmlarni tuzish – bu ijodiy ish bo’lib, ixtiyoriy zaruriy algoritmni tuzish uchun umumiy usullar mavjud emas, kishining ijodiy qobiliyatiga bog’liq. Albatta, algoritmni aniq sxema bo’yicha tuzish zarur bo’lib qoladigan sodda hollar ham mavjud. Bunday hollarda yechilish algoritmiavval biron kim tomonidan olingan masalalarni misol keltirish mumkin. Masalan, differensial tenglamalarni sonli integrallash uchun Eyler metodi. Bu metod masalani yechish uchun umumiy holda ifodalangan algoritmdir, lekin algoritmlash ijodiy ekanligini quyidagi algoritmlar nazariyasining ba’zi bir ma’lumotlaridan ko’rish mumkin. Agar bizdan biror algoritmni ishlab chiqish talab qilinsa, dastlab izlanayotgan algoritmni tuzish mumkinmi yo’qmi degan savolga javob izlash kerak. Chunki ba’zi hollarda algoritmni tuzish mumkin emasligini ko’rsatib berish mumkin. Ba’zi bir hollarda algoritmni tuzish mumkinligi isbotlanadi. Bunday isbot mavjud bo’lganligi bilan tuzilgan algoritmni amalgam oshirib bo’lmaydi yoki uning samaradorligi

Bu metodni isbotlashning algoritmik prosedurasi deb qarash mumkin. Haqiqatan ham, agar a) va b) bosqichlar amalga oshgan deb hisoblasak, quyidagi algoritmP(n) tasdiqning ixtiyoriy butun musbat n uchun isbotini beradi. Berilgan butun musbat n uchun P(n) ning o’rinli ekanini isbotlash algoritmi. A1 algoritm.

  1. boshlash.
  2. k ® 1 {((a)ga asosan P(1) tasdiqni isbotlang}
  3. agar k=n bo’lsa, u holda 6 ga o’ting
  4. p(k+1) uchun isbotlang ((b) ga asosan p(2), p(3), p(k) to’g’riligini isbotlang va p(k+1) uchun to’g’ri degan xulosaga keling)
  5. k ¬ k + 1 3 ga o’ting
  6. tugash (so’ralayotgan isbot bajarildi) (a) va (b) bosqichlar (a1 algoritm) shaklidagi isbotlash matematik induksiya yordamida isbotlashdir Yig’indi va Ko’paytmalar. a 1 (^) , a 2 ,...- ixtiyoriy sonlar ketma-ketligi bo’lsin. a 1 (^) + a 2 +...+ an ko’rinishdagi yig’indini (^) å i £ j £ n

a (^) j kompakt

ko’rinishida yozish mumkun. Agar n nolga yoki manfiy songa teng bo’lsa berilishiga ko’ra bu yig’indi nolga teng bo’ladi. j harfi indeks yoki yig’indining o’zgaruvchisi.

Yig’indilar chekli (j qiymatlarini chekli soni) va cheksiz bo’lishi ham mumkin. Agar (^) å belgisi ostida

ikki yoki undan ortiq shartlar joylashgan bo’lsa, ularning barchasi bir vaqtning o’zida bajarilish kerak.

Yig’indi uchin qisqa yozuv bo’lganidek, ko’paytma uchun ham (^) Õ £ j £ n

aj 1

qisqa yozuv ishlatiladi. (^) Õ £ j £ n

aj 1

belgi 1 £ j £ n shartni qanoatlantiruvchi barcha butun j lar uchun barcha a (^) j lar ko’paytma 1ga teng deb

hisoblanadi (yig’indi esa nolga teng bo’ladi). Butun qiymatli funksiyalar. Ixtiyoriy haqiqiy son uchu quyidagi belgilashlarni kiritamiz:

ë x û^ - x ga eng yoki x dan kichik bo’lgan eng katta butun son.

é x ù^ - x ga eng yoki x dan katta bo’lgan eng kichik butun son.

Bu funksiyalar ni ba’zida x sonining butun qismi deb yuritiladi.

Masalan: (^) ë 2 û = (^1) é 2 ù = (^2) ë û x (^) =é ù x.

Ixtiyoriy haqiqiy x va y sonlar uchun quyidagi Binar amalini belgilaymiz. X mod Y – x ni y ga bo’lgandagi qoldiqni bildiradi. Agar x va y lar butun son bo’lsa, u holda qoldiq ham butun son va x,y ga karrali bo’lsa, nol bo’ladi. 5 mod 3= 18 mod 3= Agar x va y butun sonlar bo’lsa, div butun qiymatli bo’lishni bildiradi, ya’ni butun qiymatli bo’lish natijasida har doim butun bo’ladi. 7 div 2= 2 div 5= O’rin almashtirishlar va faktoriallar. n tartibli o’rin almashtirish deb, n ta turli ob’yektlarni qatorga joylashtirish operatsiyasiga aytiladi. Masalan, a, b, c lar uchun 6 ta o’rin almashtirishlar bor. abc, bac, bca, cba, cab, acb. n ob’yektdan tuzish mumkin bo’lgan umumiy o’rin almashtirishlar soni P(n)=n(n-1)(n-2)…1=n! P(n) qiymatni n! deb hisoblaydilar va u quyidagicha yoziladi.

Õ ££

= × × × × =

kn

n n k 1

0!=1 ekanligi qabul qilingan. Butun musbat n lar uchun n!=(n-1)!n ayniyat o’rinli. 0!=1 1!=1 3!=6. Faktoriallar juda tez o’sadi. 10!=

1000! esa 2500 dan ortiq o’nli belgilardan iborat. Shunga qaramasdan kompyuterda faktorialni hisoblash uchun kam vaqt ketadi.

Dj. Stirling degan olim n e

n n! » 2 p n ( ) ga teng deb olgan.

Yana bir savol tug’ildi. Biz n! uchun n butun musbat bo’lgan hol uchun ta’rif berdik. n ning ratsional

qiymatlari yoki n haqiqiy bo’lganda n! nimaga teng degan savol tug’iladi. Masalan,! 2

÷

ø

ö ç è

æ (^) nimaga teng. Bu

masalani yechish uchun butun manfiymas n lar uchun n! ni aniqlaymiz.

! 1 2 ... ( 1 ) 1

å ££

k n

n n k

Bu faktorialning analogi, lekin bu yerda biz ko’paytirish o’rniga qo’shishdan foydalanayapmiz

Arifmetik progressiyaning yig’indisi ( 1 ) ( 2 ) 2

n! = nn +

(2) ni (1) ning o’rniga ishlatish n! funksiyani n ning ixtiyoriy qiymatlari uchun aniqlash imkonini beradi.

Masalan, 8

÷=

ø

ö ç è

æ .

Binomial koeffitsiyentlar. n ta ob’yektdan k ta ob’yektni jamlash bu n ta elementdan mumkin bo’lgan k ta turli elementni tanlash. Masalan, 5 ob’yektdan 3 tadan jamlash, a, b, c, d, e. abc, abd, abe, acd, ace, ade, bcd, bce, bde, cde. n k orqali belgilangan jamlashni umumiy soni

k k

nn n k n k

Masalan 10 3 2 1

× ×

× ×

÷=

ø

ö ç è

æ .

÷

ø

ö ç è

æ k

n qiymat binomial koeffitsiyent deb aytiladi. Binomial koeffitsiyentni faktorial yordamida hisoblash

mumkin. !( )!

k n k

n k

n

÷=

ø

ö ç è

æ

Binomial koeffitsiyentlar uchun quyidagi hossa mavjud:

÷ ø

ö ç è

æ

÷=

ø

ö ç è

æ 1

k

r k

r k

r

Fibonachi sonlari. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,… ketma-ketlikda har bir son oldingi 2 ta sonning yig’indisiga teng bo’lsa, Fibonachi sonlari deb aytiladi. F (^) n = Fn - 1 + Fn - 2 n > 0.

Bu ketma-ketlik Leonardo Fibonachi tomonidan taklif etilgan. Fibonachi sonlari va algoritmlar orasida o’zaro bog’liq borligi isbotlangan.

Takrorlash uchun savollar

_1. Matematik induksiya haqida tushuncha bering.

  1. Yig’indi va Ko’paytmalarning asosoy farqini ko’rsating.
  2. Butun qiymatli funksiyalarga misol keltiring.
  3. O’rin almashtirishlar va faktoriallarni hisoblashga misol ko’rsating.
  4. Binomial koeffitsiyentlar - bu nima?
  5. Fibonachi sonlari algoritmlarga qanday aloqasi bor?_ 3 - MAVZU: ALGORITMLAR VA ULARNING TO’LIQ TUZULISHINING BOSQICHLARI

Uning ta’rifi bo’yicha matematik model tashqi dunyoning xodisalar turkumini matematik belgilar yordamida taxminiy tavsifi. Xodisani tavsiflash uchun uning muhim xususiyatlarini, qonuniyliklarini, ichki aloqalarini, ayrim xossalarning ahamiyatini aniqlash zarur. Eng muhim faktorlari aniqlanganda, ahamiyatlari kamroq bo’lganlarini hisobdan chiqarish mumkin. Umuman, modelni tanlash fandan ko’ra, ko’proq san’at ishi deb hisoblanadi, yahshi tuzilgan modellarni o’rganish esa – modellashtirishda tajriba orttirishning eng yahshi usuli. Modelni yaratishda quyidagi savollarni aniqlash maqsadga muvofiq: 2.1. Masalani yechish uchun qaysi matematik struktura ko’proq mos keladi? 2.2. O’xshash masalaning yechimi bormi? 2.3. Masalaning barcha muhim ma’lumotlari matematik ob’yektlar orqali tavsiflanadimi? 2.4. Izlanayotgan natija biron bir matematik o’lchamga mos keladimi? 2.5. Modelning ob’yektlari orasidagi bog’lanishlar aniqlanganmi? 2.6. Tuzilgan model bilan ishlash qulaymi?

Algoritmni ishlab chiqish

Algoritmlashtirish jarayoni uslublari bo’yicha matematik modellarni tuzish jarayoniga juda yaqin. Har bir algoritmni ishlab chiqish bevosita o’ziga xos yondashishni talab qilishiga qaramasdan, bu faoliyatni umumiy uslub va bosqichlari ham mavjud. Ba’zan dasturlarni tezroq yozib boshlashga hohish paydo bo’ladi. Lekin bu xatoli, chunki aynan algoritmni ishlab chiqish bosqichiga va uning to’g’riligiga masalaning to’liq yechimi bog’liqdir.Algoritmlarni tuzish turli xil uslublari mavjud.

Algoritmni to’g’riligini tekshirish

Dastur to’g’riligini isbotlashning eng keng tarqalgan turi – bu uni testlardan o’tkazishdir. Algoritmni tekshirishda nazoratchi boshlang’ich ma’lumotlarni majmui algoritmik test deb nomlanadi. To’g’ri deb shunday algoritmga aytiladiki, u masalaning qo’yilishida talab qilinadigan natijani har qanday ruxsat etilgan boshlang’ich ma’lumotlar bilan ham shakllantirib biladi. Odatda, dastur bergan natijalar ma’lum bo’lgan yoki qo’lda hisoblangan ma’lumotlar bilan taqqoslanadi, va ular to’g’riligi aniqlansa dastur to’g’ri ishlaydi degan hulosaga kelish mumkin. Ammo bu usul bilan foydalanuvchini hamma shubhalardan xalos qilib bo’lmaydi, ya’ni dastur ishlamaydigan hamma holatlarni hisobga olib bo’lmaydi. Gudman va Xidetniyemi [2] lar tomonidan algoritm to’g’riligini isbotlash uchun quyidagi uslubiyat taklif qilingan. Algoritm 0 dan m gacha bo’lgan qadamlar ketma-ketligi ko’rinishida tavsiflangan deb tahmin qilaylik. Har bir qadam uchun qandaydir asoslanishni taklif etamiz. Xususan, qadamdan oldin va keyin ishlaydigan shartlar haqida lemma kerak bo’lishi mumkin. Shu bilan birgalikda, algoritm chekliligining isbotini ham taklif etamiz, va hamma ruxsat etilgan kiritish ma’lumotlarini tekshirib, hamma mumkin bo’lgan chiqarish ma’lumotlarni olamiz. Algoritmni to’g’riligi bilan samaradorligi o’rtasida hech qanday aloqa yo’qligini ta’kidlab o’tamiz. Aslida hamma talablarga bir xil yahshi javob beradigan algoritm kamdan-kam ishlab chiqiladi.

Algoritmni amalga oshirish

Algoritmni amalga oshirish deganda, EHM uchun dasturni yozish deb tushuniladi. Buning uchun quyidagi savollarga javob berish kerak: 5.1. Asosiy o’zgaruvchilarni aniqlash. 5.2. O’zgaruvchilarning turlarini aniqlash. 5.3. Nechta massiv yoki fayllar va qanday kattalikda ular kerak bo’ladi? 5.4. Bog’lanilgan ro’yhatlardan foydalanish ma’nolimi? 5.5. Qanday dasturiy qismlar kerak bo’lishi mumkin (tayyor bo’lsa ham)? 5.6. Qaysi dasturlash tilini tanlash?

Dastur yozish yoki tuzishning hilma-hil usillari va uslublari mavjud.

Algoritmni va uning murakkabligini tahlil qilish

Algoritmni tahlil qilishdan maqsad – algoritmga ma’lumotlarni aniq muvaffaqiyatli qayta ishlash uchun kerak bo’ladigan xotira hajmi va ishlash vaqtining baholari va chegaralarini olish. Bir masalani yechadigan ikki algoritmni taqqoslash uchun qandaydirsonli mezon topish kerak. Faraz qilaylik, A – qandaydir bir turkumdagi masalalarni yechadigan algoritm, n – esa shu turkumdagi alohida bir masalaning kattaligi. Umumiy holda, n – oddiy skalyar yoki massiv yoki kiritiladigan ketma – ketlikning uzunligi bo’lishi mumkin. fA ( n ) - n kattalikdagi ixtiyoriy masalani yechadigan algoritm A

bajarish kerak bo’lgan asosiy amallarni (qo’shish, ayirish, taqqoslash,…) yuqori chegarasini beradigan ishchi funksiya. Algoritmningsifatini baholash uchun quyidagi mezonni ishlatamiz. Agar fA ( n )o’sish tartibi n dan bog’liq bo’lgan polinomdan katta bo’lmasa, A algoritm polinomial deb

aytiladi, aks holda algoritm A eksponensial hisoblanadi. Shular bilan birgalikda tahlil jarayonida ko’p matematik fanlarda standart bo’lgan iboralar ishlatiladi.

fA ( n ) funksiya O[g(n)] deb belgilanadi, va 0 ( )

lim = ¹ ® ¥ const gn

f n n bo’lganda, uni tartibi katta n lar

uchun g(n) deb qabul qilinadi. Demak f(n)=O[g(n)].

fA ( n )funksiyasi o[z(n)] deb katta n lar uchun belgilanadi, va unda 0 ( )

lim = ® ¥ zn

hn n sharti bajariladi.

Bu begilar “katta O” va “kichik o” deb nomlanadi. Agar f(n)=O[g(n)] bo’lsa, ikkala funksiya ham n ® ¥bo’lganda bir xil tezlikda o’sadi. Agar f(n)=O[g(n)] bo’lsa,unda g(n), f(n) nisbatan ancha tez o’sadi. Demak, Pk ( n )- qandaydir n o’zgaruvchidan bog’liq va k darajadagi polinom uchun f (^) A ( n )= O [ Pk ( n )]

yoki f (^) A ( n )= oPk ( n ) bo’lganda algoritm polynomial hisoblanadi, aks holda algoritm eksponensial.

Eksponensial algoritm yahshi ishlamaydigan deb hisoblanadi. Agar algoritmlar eksponensial bo’lsa,

ular orasida eng samaralisini topish kerak, n kattalikdagi masalani O ( 2 n ) qadamda yechadigan algoritm

O ( n! )yoki O ( nn )qadamda masalani yechadigan algoritmdan afzalroq.

Dasturni tekshirish

Biz dasturni har bir qismini tekshiradigan kirituvchi ma’lumotlar to’plamini tanlashimiz kerak. Ko’p murakkab algoritmlarni matematik tomondan tadqiq qilish yoki juda qiyin yoki mumkin emas. Bunday holatlarda algoritmni faoliyat jarayonida va qiyinligi bo’yicha tekshiradi. Bundan tashqari dasturlarni hisoblash imkoniyatlarini aniqlash uchun ham testlash maqsadga muvofiq. Ko’p dasturlar qandaydir kiritiladigan ma’lumotlar bilan yahshi ishlasa, boshqalari bilan yomon ishlaydi. “Yahshi” lardan “yomon” larga o’tish “mayin” bo’lish kerak. Testlash uchun ma’lumotlar dasturning qiyinligiga, mavjud vaqt resurslariga, kiritish-chiqarishsoniga bog’liq holda tanlanadi. Bu yerda analitik va eksperimental tahlil bir- birini to’ldiradi.

Hujjatlashtirish

O’zingiz yozmagan dastur kodini o’qish juda qiyin. Bu muammoni hujjatlashtirish yordamida yechsa bo’ladi. Hujjatlashtirish o’z ichiga hamma yordamchi ma’lumotlarni oladi va dasturda nima bajarilishini tushuntirib beradi, xususan, blok-sxemalardagi boshqarishni uzatish, berilganlarni kiritish-chiqarish shaklini batafsil tavsif qilish, siklning parametrlari, yordamchi local va global proseduralarni bajarilishi va boshqalar. Hujjatlashtirishning eng asosiy qoidasi bu “boshqalar yozgan dasturlarni qanday ko’rishni istasangiz, o’zingiz ham dasturni shunday ko’rinishda rasmiylashtiring”.

Sikl bosh. ruyhat. Sikl tug.

  1. Takror ruyhat to shart.
  2. i=n dan m gacha sikl bosh ruyhat sikl tug. Bu tilda yozilgan algoritmlarni yuqori darajali dasturlash tiliga bevosita o’tkazish oson. Algoritmni tuzishda va tahlil qilishda bu yerda faqatgina qabul qilingan algoritmik tildagi konstruksiyaga mos buyruqlarni bajarish uchun kerak bo’ladigan vaqt va xotira muhim.

Takrorlash ucun savollar

_1. Algoritmni tavsiflash uchun qaysi tillardan foydalansa bo’ladi?

  1. Asosiy konstruksiyalarni blok-sxema yordamida ifodalang.
  2. Asosiy konstruksiyalarni Paskal dasturlash tilida ifodalang.
  3. Asosiy konstruksiyalarni C++ tilida ifodalang._

5 - MAVZU: ALGORITMLAR VA ULARNING QIYINLIGI

Reja

**_1. Algoritmni baholash mezonlari.

  1. Algoritmni vaqt qiyinligi bo’yicha optimallashtirish.
  2. Algoritmni hajmiy qiyinligi bo’yicha optimallashtirish._**

Algoritmlarni baholash uchun ko’pgina mezonlar mavjud. Odatda kirituvchi berilganlarni ko’payishida masalani yechish uchun kerak bo’ladigan vaqt va xotira hajmlarini o’sish tartibini aniqlash muammosi qo’yiladi. Har bir aniq masala bilan kiritiladigan berilganlarni miqdorini aniqlovchi qandaydir sonni bog’lash zarur. Bunday son masalaning kattaligi deb qabul qilinadi. Masalan, ikkita matritsani ko’paytirish masalasining o’lchami bo’lib, matritsalar kattaligiga xizmat qilishi mumkin. Graflar haqidagi masalada o’lcham sifatida graf shohlarining soni bo’lishi mumkin. Algoritm sarflanayotgan vaqt masalaning o’lchami funksiyasi sifatida algoritmni vaqt bo’yicha qiyinligi deb nomlanadi. Bunday funksiyaga masalaning kattaligi oshganda limit ostidagi o’zgarish asimptotik qiyinlik deb aytiladi. Shunga o’xshab, hajmiy qiyinlik va asimptotik hajmiy qiyinlikni aniqlash mumkin. Aynan algoritmning asimptotik qiyinligi natijada shu algoritm yordamida yechiladigan masalarni kattaligini aniqlaydi. Agar algoritm n kattalikdagi kirishlarni С × n^2 vaqtda qayta ishlasa (c-const), unda

algoritmning vaqt bo’yicha qiyinligi O ( n^2 )teng deb hisoblanadi, va n tartibda deb aytiladi. Hisoblash mashinalar tezligi oshishiga qaramasdan, ular yordamida yechilayotgan masalalar kattaligini oshishini algoritm qiyinligini tahlil orqali aniqlaydi. Faraz qilaylik, A1,A2,…,A5 nomli 5 ta algoritm quyidagi vaqtli qiyinliklar bilan berilgan.

Algoritm Vaqtli qiyinlik

A1 N

A2 (^) N log 2 n

A3 N^2

A4 N^3

A5 2 n

Bu yerda vaqtli qiyinlik – bu n kattalikdagi kirishlarni qayta ishlash uchun kerak bo’ladigan vaqt birliklar soni. Masalan, vaqt birligini 1 millisekund deb qabul qilaylik. Bunda A1 algoritm bir sekundda 1000 kattalikdagi kirishni qayta ishlash mumkin, A5 algoritmi esa kirish kattalikdagina 9 dan oshirib bilmaydi. Keyingi jadval 1 sekundda, 1 minutda, 1 soatda 5 ta algoritmlarni har birining yordamida yechiladigan masalaning kattaligi keltirilgan.

Algoritm Vaqtli qiyinlik Masalaning maksimal o’lchami

1 sek 1 min 1 soat

A1 N 1000 60*100 3 , 6 * 106

A2 (^) N log 2 n (^140 4893 2) * 104

A3 (^) N^231 244

A4 N^310 39

A5 2 n 9 15 21

Faraz qilaylik, keyingi avlod hisoblash mashinalari birinchi jadvalga nisbatano’n barobar tezligi oshadi. Keyingi jadvalda shunday oshishga nisbatan yechiladigan masalalar kattaligining oshishi ko’rsatilgan.

Bu yerda A algoritm uchun tezlikni 10 barobar oshishi masalaning kattaligining uchga oshishiga olib keladi. A algoritm esa kattalik uch barobardan ziyod oshadi. Endi, tezlik oshishining o’rniga algoritmni kiruvchi

Algoritm Vaqtli qiyinlik Masalaning maksimal kattaligi

1 sek 1 min 1 soat

A1 N (^) s 1 10 s 1 » 10 A2 (^) N log 2 n s 2 10 s (^) 2 » 10 A3 (^) N^2 s 3 3 , 16 s 3 » 3 A4 (^) N^3 s 4 2 , 15 s 4 » 2 A5 2 n s 5 s 5 (^) + 3 , 3 » 10 / 3

  • Bir algoritmni qandaydir dastlabki ma’lumotga qo’llanilishi, ikkinchi algoritmni ham shu berilganga qo’llanilishiga kafolat beradi.
  • Bir xil dastlabki berilgan ma’lumot uchun ikkala algoritm ham bir xil natija berishi. Lekin bu algoritmni ikki xil shakllarini ekvivalent deb nomlash noto’g’ridir. Shunday qilib, algoritmni ekvivalent qayta ishlash deb, natijada dastlabki algoritmga ekvivalent algoritmni paydo qiladigan o’zgartirilishlarga aytiladi. Misol tariqasida, algoritmni bir tildan boshqa tilga o’tkazishni keltirish mumkin. Shu bilan birgalikda algoritmni ekvivalent qayta ishlash usuli bilan keskin o’zgartirish mumkin, lekin bu holda asosiy e’tiborni dastlabki algoritmga nisbatan yahshi algoritmni yaratishga berish kerak. 3, Toraytiruvchi o’zgartirishlar. Bunday o’zgartirishlar natijasida dastlabki algoritmlar yechish kerak bo’lgan masalalarning xususiy holati yechimi algoritmlari ishlab chiqiladi. Odatda, bu usulda ekvivalent qayta ishlash jarayonida algoritmni ixchamlashtirish maqsaddida foydalaniladi. 4. Formal usulni matematikaga bog’liq bo’lmagan muammoga qo’llash. Buyerda matematik muammo matematik ko’rinishga o’tkazilib, uning algoritmini ishlab chiqishga uriniladi. Agar o’xshash matematik masala yechimining algoritmi ma’lum bo’lsa, undan foydalaniladi.

Takrorlash ucun savollar

  1. Har bir usul bo’yicha algoritm tuzishga misol ko’rsating.
  2. Algoritmni ishlab chiqish uchun yana qanday usullarni bilasiz? 7 - MAVZU: MAKSIMUMNI TOPISH MASALASI

Reja

**_1. Masalaning qo’yilishi.

  1. So’zli algoritmni ishlab chiqish
  2. Algoritmni tahlil qilish_**

Yuqorida orttirilgan bilimlar yordamida bir tipik masalani yechamiz: Masalaning qo’yilishi. x 1 (^) , x 2 ,..., x n berilgan elementlar bo’yicha m va j larni shunday topingki,

m = max xk { 1 £ k £ n }= x j bo’lsin. Bu yerda j mumkin bo’lgancha maksimal bo’lsin.

So’zli algoritm

  1. Boshlanish.
  2. j:=n; k:=n-1; m:=xn;
  3. agar k::=0 unda 7 o’ting.
  4. agar xk<=m unda 6 o’ting.
  5. j:=k; m:=xk;
  6. k:=k-1; 3 o’ting;
  7. tamom. Algoritm sodda va analizga muhtoj emas deb hisoblanadi. Lekin shu misolda murakkab algoritmn qanday tahlil qilish kerakligini ko’rsatish mumkin. Algoritm tahlili dasturlash uchun juda muhim. Biz faqatgina bu algoritmni bajarish uchun kerak bo’ladigan vaqtni tahlil qilamiz.Buning uchun har bir qadam necha marta bajarilishini hisoblaymiz:

Qadam raqami Necha marta bajarilishi

3 n 4 n- 5 A 6 n-

Har bir qadam necha marta bajarilishini bilgan holda, kompyuterga masalani bajarish uchun qancha vaqt kerakligini hisoblab chiqish mumkin. Jadvalda A dan tashqari hamma qiymatlar ma’lum, A – bu joriy maksimum qiymatini necha marta o’zgartirish kerakligini ko’rsatkichi. Taxlilimiz to’liq bo’lishi uchun A ni ko’rib chiqamiz. Tahlilning maqsadi A uchun min va max qiymatlarni topish.

  1. Min A = 0, bu holat

x (^) n = max xk { 1 £ k £ n }

bo’lganda kuzatiladi.

  1. Max A=n-1; bu qiymatga

x 1 > x 2 >...> x n

holatida erishiladi.

Shunday qilib A ning tahlili 0 va n-1 larning o’rta arifmetik qiymati va o’rta kvadratini chetlanishini va usullari yordamida topish masalasiga olib keladi.

Takrorlash ucun savollar

  1. Masala quyilishida qaysi o’zgaruvchilar aniqlandi?
  2. Algoritmda qanday konstruksiyalar qatnashgan?
  3. Aniqlangan noma’lum qiymat nechanchi qadamda bajariladi?
  4. Algoritm tahlilini yakunga yetkazish ucun qanday usullarni qo’llash kerak?

8 - MAVZU: EVKLID ALGORITMI

Reja

**_1. Masala qo’yilishi.

  1. Algoritmni tuzish
  2. Algoritm tahlili
  3. Algoritm optimallashtirish
  4. Algoritmni amalga oshirish_**

Masala qo’yilishi

4. Algoritm optimallashtirish

Masala qo’yilishi

Etalon bilan taqqoslash muammosining bir o’lchamli holatida tasvirlarni tanish masalalaridan quyidagisini ko’ramiz. Kirish ma’lumoti sifatida n ta haqiqiy sonlardan iborat X vektor berilgan. Chiqishda shu vektorning barcha uzluksiz qism vektorlari orasida maksimal elementlar yig’indini hosil qilish kerak. Masalan, kirish vektori

31 -41 59 26 -53 58 97 -93 -23 84

® 3 ® 7

bo’lsa, unda chiqishda X[3..7] vektorning 187 qiymatli yig’indisini hosil qilamiz. Bu yerda, agar kirish vektorida hamma sonlar musbat bo’lsa, masala osonlashadi; maksimal qism-vektor sifatida kirish vektorning o’zi xizmat qiladi. Agar X vektorda manfiy sonlar ham bo’lsa, masala qiyinlashadi.

Algoritmni tuzish

Masalani yechish uchun, barcha elementlari manfiy bo’lgan vektorda maksimal yig’indiga ega bo’lgan vektor-qismni bo’sh vektor, ya’ni elementlar yig’indisi nolga teng bo’lgan vektorni qabul qilish shartini kiritamiz. Eng oddiy variantda algoritm (^1) £ L £ U £ N shartini qanoatlantiruvchi barcha L va U butun sonlar juftliklari bo’yich X[L..U] vektorlari elementlari yig’indilarini hisoblab chiqadi va har qadamda topilgan yig’indi shungacha topilgan yig’indidan kattaligi tekshiriladi. Psevdotilda dastur quyidagicha bo’ladi: Maxsum:=0,0; For L:=1 to N do For U:=L to N do Begin Sum:=0,0; For i:=L to U do Sum:=Sum+x[i]; Maxsum:=max(maxsum, sum); End.

Algoritm tahlili

Dasturning jiddiy kamchiligi – sekin ishlashi. 1990 yildagi o’rta tezlikka ega bo’lgan kompyuterlarda (286) N=1000 bo’lganda 1 soat, N=10000 bo’lganda 39 soat vaqtda bajarilgan. Bunday tezlikdagi dasturni qo’llab bo’lmaydi. Algoritm samaradorligini intuntiv baholab ko’raylik. O-yozuvdan foydalanamiz. Eng tashqi siklning operatorlari aniq N marta bajariladi, o’rta siklning operatorlari tashqi siklning har bir qadami bo’yicha

bajarilishi N dan oshmaydi. Demak, o’rta siklda bajarilayotgan 4 ta satr O ( N^2 ) marta qiyinlik bilan

baholanadi. Shu 4 ta satrlarda joylashgan sikl bajarilish soni ham N dan oshmaydi va O(N) bilan

baholanadi. Baholarni ko’paytirish natijasida algoritmni umumiy bahosi N^3 proporsionalligini aniqlaymiz. “O-yozuv” usulning kamchiligi shundaki – konkret berilganlar uchun dastur bajarilishiga aniq

sarflanayotgan vaqtni hisoblab bilmaymiz, faqatgina qadamlar bajarilish soni O ( N^3 ) bo’lganini bildik.

Lekin bu usul bilan tahlil qilish qulay, va berilgan amaliy masala uchun dasturni samaradorligini aniqlaydigan dastlabki hisoblashlar uchun algoritmning isahlash vaqtini assimptotik bahosini beradi.

Shu tahlil yordamida quyidagi algoritm yuqoridagi masalani O ( N^2 ) qadamlar bilan yechimini

ko’rsatamiz. Algoritm optimallashtirish

Bu algoritmda X[L..U] vektorning elementlar yig’indisi birinchi algoritmdagidek (U-L+1) qadamda emas, balki aniq sonli qadamlar bilan topiladi. Yig’indini tez hisoblanishi X[L..U] vektorning elementlar yig’indisi, X[L..U-1] vektorning yig’indisiga bog’liqligiga asoslangan. Algoritm ko’rinishi quyidagicha: Maxsum:=0,0; For L:=1 to N do Begin sum:=0,0; For U:=L to N do sum:=sum+x[U]; Maxsum:=max(maxsum, sum); End. Birinchi siklning ichidagi operatorlar N marta, ikkinchi siklning ichidagi tashqi siklning har bir qadami uchun N martadan ko’p bo’lmagan qadamlar bilan bajariladi. Demak, algoritm ishlashining umumiy vaqti

O ( N^2 ). Shunday qilib algoritm ishlash vaqti samaradorligi bo’yicha yahshilandi.

Takrorlash uchun savollar

_1. Masala qo’yilishidagi o’zgaruvchilarni aniqlang.

  1. Algoritm optimallashtirish uchun qanday qadam qo’shildi?
  2. Algoritm qaysi dasturlash tilida amalga oshirildi?_

10 - MAVZU: KOMMIVOYAJER MASALASI

Reja

**_1. Masala qo’yilishi. 2.Evristik algoritmlar.

  1. GTS algoritmini tuzish
  2. Algoritmni baholash_**

Masala qo’yilishi. Djek – kompyuterlar sotish bo’yicha agent (kommivoyajer), uning qaramog’ida 20 ta shahar bor. ishlayotgan kompaniya yo’l harajatlarining 50% ni to’laydi. Djek uning qaramog’ida bo’lgan har ikki shahar orasida yo’l harajatini hisoblab chiqqan. Masala yo’l harajatlarini kamaytirishdan iborat. Dastlabki ma’lumotlar Djek tasarrufidagi shaharlar ruyhati va narxlar matrisasi ko’rinishida berilgan. Bu yerda matrisa i shahardan j shaharga borish narxiga teng bo’lgan c(i,j) elementlardan tashkil topgan ikki o’lchamli massiv. Shaharlar soni 20 ta bo’lsa, matrisa - (^20) ´ 20 bo’ladi. Biz Djekga yo’l harajatlarini kamaytirishga yordam berishimiz kerak. Djekning marshruti o’zi yashagan shahardan boshlanib, qolgan hamma shaharlarni bir martadan o’tib, yana o’z shahriga qaytib kelishi kerak. Demak, biz tuzayotgan ruyhatda har bir shahar faqat bir marta uchrashi kerak, Lekin Djek yashagan shahar ikki marta uchrab, ruyhatning birinchi va oxirgi elementlari bo’ladi. Undan tashqari, ruyhatdagi shaharlar tartibi Djekning marshrutini belgilaydi. Ruyhatdagi ikkita oxirgi shaharlar orasidagi yo’l narxi – bu butun marshrut narxi deb hisoblanadi. Demak, agar biz Djekga eng kichik narxdagi ruyhatni tuzib bersak, masalani yechgan bo’lamiz.

Rasm 2. Algoritm qadamlari

GTS algoritmi bo’yicha marshrut narxi 14 ga teng. Bu yerda algoritm eng kichik narxli marshrutni topmaganini ko’ramiz. Masalan, marshrut 1-5-3-4-2-1 narxi 5+2+1+4+1=13. Odatda yaqinlashgan algoritmlar tez bo’lsa ham, hamma vaqt optimal yechimni berolmaydilar. GTS algoritm uchun biz nazoratchi nisol topib bildik. Lekin, yaqinlashgan algoritm ishlamasligini isbotlash hamma vaqt ham oson bo’lmaydi. GTS algoritmi uchun dastur yozish ancha yengil. Lekin uni tezligini tahlil qilib ko’raylik. Ixtiyoriy

kommivoyajer masalasi uchun (besh shahardan iborat) C narxlar matrisasini o’qish va tuzishga O ( N^2 )

operatsiya kerak. Demak, pastki murakkablik chegara algoritm uchun O ( N^2 ) teng va GTS algoritmini

yahshi evristik algoritm deb qabul qilishimiz mumkin.

Takrorlash ucun savollar

_1. Masala qo’yilishidagi o’zgaruvchilarni aniqlang. 2.Evristik algoritmlarni ta’riflab bering.

  1. GTS algoritmini tuzishdagi qadamlarni aytib bering.
  2. Algoritmni baholash jarayonini tavsiflab bering._

11 - MAVZU: SHOHLAR VA CHEGARALAR USLUBI

Reja

**_1. Masala qo’yilishi.

  1. To’rsimon modellardan foydalanish.
  2. Shoxlar bo’yicha baholash.
  3. Chegaralar bo’yicha baholash._**

Bu usul yechimlar fazosining tursimon modelini ta’qiq qiladigan usullar turiga kiradi va kombinatorika masalalarining keng doirasiga qo’llanilishi mumkin. Bunday algoritmlar ko’proq optimizatsiyaga yo’naltirilgan va ancha murakkab bo’ladi, lekin kommivoyajer masalasini yechishda juda qulay hisoblanadi. Masalani tarmoqlanish ko’rinishida tadqiq qilamiz. Quyidagi rasmlarda beshta shahar uchun kommivoyajer assimmetrik masalasining narxlar matrisasi berilgan.

Rasm 1. Narxlar matrisasi

Rasm 2. To’rsimon model

Bundan tashqari rasmda narxlarni ko’rsatish uchun yo’naltirilgan tarmoqdan foydalanamiz. Bu yerda i shahardan j shaharga borish bahosi, j dan i ga borish bahosiga teng bo’lishi shart emas. Bizning izlash daraxtimizning ildizi barcha mumkin bo’lgan marshrutlar to’plamiga mos bo’ladi, ya’ni besh shahar masalasidagi (4!) marshrutlar to’plamini aks ettiradi. Umuman, ixtiyoriy N shaharni assimmetrik masala uchun ildiz barcha {(N-1)!} mumkin bo’lgan marshrutlar R to’plamini akslantiradi. Ildizdan tarqaladigan shohlar bir qirrani, masalan, (i,j) – ni tanlash bilan aniqlanadi. Bu ishdan maqsad – barcha marshrutlar to’plamini ikki to’plamga ajratish: Biri optimallashgan tur, ikkinchisi esa optimallashmagan turlardan iborat bo’ladi. (i,j) tanlangan qirra optimal turga tegishli deb hisoblagan holda, R to’plamni ikkiga bo’lamiz, ya’ni {i,j} va {i,j} to’plamlarga. {i,j} to’plamiga (i,j) qirrasi qatnashgan turlar kiradi, {i,j} to’plamga esa shu qirra qatnashmagan tur.