Загрузил Shamurat Durdibayev

Algoritmlarni loyihalash

Реклама
O‘ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA
KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT
TEXNOLOGIYALARI UNIVERSITETI
Mustaqil ish
Guruh: 512-22
Bajardi: Durdibayev Shamurat
Oqituvchi: Matyakubov Marks
Toshkent 2024
“Ajrat va xukmronlik qil” tilidagi algoritmlar .
REJA:
1. Ajrat va hukmronlik qil usuli.
2. Kesh xotira bilan ishlash.
3. Qo’llanish muammolari.
4. Misollar .
5. Xulosa .
Ajrat va hukmronlik qil usuli
Dasturlashda, ajrat va hukmronlik qil — bu algoritmik paradigm bo’lib, bu
paradigmaning asosiy g’oyasi algoritmik masalalarni bosh masalaga o’xshash
kichik qismlarga ajratb, ularni rekursiv hal qilishdan iborat. Bu paradigmada
masala qismlarga bo’linganligi sababli, qism masalalar bosh masalaga qaraganda
kichikroq bo’lishi va bu bo’linish to’xtashi uchun asos holat bo’lishi kerak.
Barcha turdagi ajrat va hukmronlik qil algoritmlari 3 ta bosqichdan iborat
bo’ladi:
Ajrat bosqichi. Bunda bosh masala huddi shu masalaga o’xshash kichikroq
masalalarga bo’lib chiqiladi.
Hukmronlik bosqichi. Asos holatimizga mos kelib qolgan qism masalalar huddi u
kabi yechiladi.
Birlashtirish bosqichi. Bu bosqichda yechilgan kichik qism masalalar qaytib
birlashtirib chiqiladi va bu bosh masala yechimi bo’ladi.
Shu sababli, ajrat hukmronlik qil paradigmasini 3 ta jumla bilan eslab qolish
mumkin:
Ajrat va hukmronlik qil paradigmasi dasturlashning mashhur algoritmlari
asosini tashkil qiladi:

Quick Sort

Merge Sort

Eng yaqin ikki nuqta (Closest two points)

Strassen ko’paytirishi (Strassen multiplication)

Karatsuba algoritmi (Karatsuba algorithm)

Cooley-Tukey algoritmi (Cooley-Tukey Algorithm)

qiyin masalalarni osonlik bilan yechishga imkon beradi
Ajrat va hukmronlik qil paradigmasining afzalliklari

bu paradigmaga asoslangan algoritmlar oddiy yechimlardan ko’ra tezroq
ishlaydi. Masalan: oddiy saralash bo’lgan Bubble Sortning tezligi O(n²) bo’lsa,
MergeSortniki O(n*logn)

bunday algoritmlarni parallel hisoblovchi sistemalarda hech qanday
o’zgarishsiz ishlatish mumkin

bunday algoritmlarni qo’llashda xotira keshidan unumli foydalanish
mumkin. Chunki masalalar bo’linish jarayonida shunday kichik qismlarga
ajraladiki, ularni keshni o’zida turib yechish mumkin bo’ladi.

haqiqiy sonlar uchun bunday algoritmlar aniqroq ishlaydi, chunki qism
yechimlardagi haqiqiy sonlar ustidagi amallar aniqroq bajariladi (masalan,
ko’paytirish algoritmlarida)
Ajrat va hukmronlik qil paradigmasi kamchiliklari

bunday paradigma asosida ishlaydigan algoritmlar rekursiyadan
foydalanadi va bu ularni ishlashini ma’lum miqdorga sekinlashtiradi. Buning
ustiga kichik bir xato yechimni cheksiz takrorlanishga tushirib qo’yishi mumkin.

asosiy shartni tanlashda yo’l qo’yilgan xato barcha qism masalalarda
xatolik va ortiqcha xotira ishlatilishiga olib keladi
2. Kesh xotira bilan ishlash
Kesh - bu shaxsiy kompyuter protsessoridan tez-tez so'raladigan ma'lumotlarni
ma'lum vaqt davomida saqlash uchun foydalanadigan yuqori tezlikda ishlaydigan
xotira. Bu samaradorlikni sifat jihatidan oshiradi, chunki u protsessorga kerakli
ma'lumotlarni qidirish va ma'lumotlarni eng tezkor ravishda qanday olish
kerakligini ko'rsatib beradi. Kesh xotirasi turli xil operatsiyalar tezligiga bevosita
ta'sir qiladi, chunki u oldindan kerakli ma'lumotlarni saqlaydi. Uning ishlash
printsipini oddiy misol bilan tavsiflash mumkin. Ularning ishini optimallashtirish
uchun har qanday kishi ish stolidagi narsalarni ma'lum mantiqiy tartibda tartibga
solishga harakat qiladi.
Ehtimol, ruchkalar, telefon, kerakli ma'lumotnomalar, joriy hujjatlar va
boshqalar yaqin joyda joylashgan bo'lishi mumkin, chunki har safar kimdir besh yil
oldin yillik hisobot ostida kerakli hujjatlarni yashirgan bo'lishi mumkin emas,
chunki bu vaqt va kuch talab qiladi. Aynan shu printsip asosida kesh-xotira
ishlaydi. Kompyuter darajasida bu nimani anglatadi? Aslida shunga o'xshash
jarayon. Barcha ma'lumotlar shaxsiy kompyuterda ma'lum bir ierarxiyada mavjud.
Agar ba'zi ma'lumot boshqalarga qaraganda tez-tez talab qilinadigan bo'lsa, ular
mos ravishda yaqinroqdir.
Protsessor ishlash uchun o‘z ma’lumotlarini operativ xotiradan oladi. Bunda
mikrosxema ichida signallar juda katta chastotada (bir necha yuz MGts) ishlanadi,
operativ xotiraga murojaatlarning hammasi esa bir necha marta kam chastotada
sodir bo‘ladi. Chastotaning ichki ko‘paytirish koeffitsienti qanchalik yuqori bo‘lsa,
protsessor, tashqarida saqlanayotgan ma’lumotlarga qaraganda, o‘zining ichida
saqlanayotgan ma’lumotlar bilan shunchalik samaraliroq ishlaydi. Odatda
protsessor o‘zining ichida deyarli hech narsani saqlamaydi. Unda ma’lumotlarga
ishlov beriladigan yacheykalar (bu «ishchi» yacheykalar registrlar deb ataladi) juda
kam. Shuning uchun protsessor ishini tezlatish uchun ancha oldin (4-avloddan
boshlab) keshlash texnologiyasi taklif qilingan.
Bugungi kunda kesh-xotira «piramidali» o‘rnatiladi. Tezligi bo‘yicha eng
tezkor, lekin hajmi bo‘yicha eng kichik birinchi darajali kesh-xotira protsessor
kristalli tarkibiga kiradi. Ularni protsessor registrlari tayyorlanadigan
texnologiya bo‘yicha tayyorlashadi, natijada u juda qimmat, lekin juda tezkor va
eng asosiysi ishonchli bo‘lib qoldi. Uning o‘lchami atigi bir necha o‘n Kbayt bilan
o‘lchanadi, lekin u tez ishlov berishda juda katta ahamiyatga ega. Ikkinchi daraja
kesh-xotirasi protsessorning o‘sha kristallining o‘zida joylashishi mumkin (bu
holda u protsessori yadrosi chastotasida ishlaydi). Odatda ikkinchi daraja keshxotira hajmi yuzlab Kbaytda (128/256/512 Kbayt va h.k.) o‘lchanadi.
Eng katta, lekin eng sekin kesh-xotira – bu uchinchi daraja keshidir. U
protsessorga kirmaydi, chunki onalik platasida o‘rnatiladi va uning chastotasida
ishlaydi. Uning o‘lchamlari 1-2 Mbaytga yetishi mumkin. Birinchi va ikkinchi
daraja kesh-xotira o‘lchami protsessor narxiga juda katta ta’sir qiladi. Bir modelli
va berilgan ishchi chastotali protsessorlar kesh-xotira hajmi bilan farqlanishi
mumkin.
Dasturlashda cache-oblivious algoritmlar protsessorning keshini (inglizcha
kesh) kesh hajmiga (yoki kesh satrlarining uzunligiga) bog’lamasdan ishlatadigan
tarzda yaratilgan algoritmlardir. Optimal cache-oblivious algoritm o'zgaruvchan
omillarni hisobga olmagan holda asimptotik ma'noda keshni optimal ravishda
ishlatadigan cache-oblivious algoritmdir. Bunday algoritmlar turli xil xotira
darajalaridagi kesh hajmidan qat'iy nazar har xil mashinalarda samarali va
modifikatsiyasiz ishlaydi.
Oddiy cache-oblivious algoritmlar: matritsani ko'paytirish, tashqi tartiblash,
matritsani transpozitsiyasi va boshqa ba'zi vazifalar. Odatda, cache-oblivious
algoritmlar “ajrat va hukmronlik qil” usulidan foydalanadi, bunda vazifa kichik
vazifalar va quyi qismlarga bo'linadi. Ajratish jarayonida biz kichik vazifalarga ega
bo’lamiz. Bir muncha vaqt o'tganda, ushbu kichik vazifalar kesh hajmiga moslasha
boshlaydi, biz ularning qachon moslashishini bilmaymiz, lekin eng kichik asos
o'lchamlarga bo'lishda davom etamiz.
Keyin kichik vazifa uchun samarali algoritmni qo'llaymiz. Shundan so’ng
natijalarni asosiy vazifaning mohiyatiga qarab birlashtiramiz. Masalan, matritsani
ko’paytirishning cache-oblivious algoritmi har bir matritsani to'rtta kichik
matritsaga rekursiv ravishda bo'lish orqali hosil bo’ladi. Matritsa to’liq holda
keshga joylashganda kichik masalalarga mo’ljallangan optimallashtirilgan
algoritmdan foydalanamiz, keyinchalik funktsiyalar natijasini matritsaga
qo'shamiz.
3. Qo’llanish muammolari
Rekursiya
Rekursiya deb shundаy kоnstruktsiyagа аytilаdiki, funktsiya o‘zini o‘zi
chаqirаdi. To‘g‘ri vа nisbiy rekursiya аjrаtilаdi. Funktsiya to‘g‘ri rekursiv
deyilаdi, аgаr tаnаsidа o‘zigа murоjааt bo‘lsа. Funktsiya bоshqа funktsiyani
chаqirsа vа bu funktsiya o‘z nаvbаtidа birinchi funktsiyani chаqirsа, bundаy
funktsiya nisbiy rekursiv deyilаdi.
Quiksort – tez saralash algoritmi “ajrat va hukmronlik qil” tamoyilining
yaqqol misolidir. Bu algotirm rekursiv bo’lib, o’rtacha N*log2N ta solishtirish
natijasida saralaydi. Algoritm berilgan massivni saralash uchun uni 2 taga bo’lib
oladi. Bo’lib olish uchun ixtiyoriy elementni tanlab undan 2 ta qismga ajratiladi.
Lekin o’rtadagi elementni tanlab, massivning teng yarmidan 2 ga ajratgan
ma’qul. Tanlangan kalit elementga nisbatan chapdagi va o’ngdagi har bir element
solishtiriladi. Kalit elementdan kichiklar chapga, kattalar o„ng tomonga
o’tkaziladi. Endi massivning har ikkala tomonida xuddi yuqoridagi amallar
takrorlanadi. Ya’ni bu oraliqlarning o’rtasidagi elementlar kalit sifatida olinadi va
h.k.
Stek
Stekning implementasiyasi ikki xil usulda bajarilishi
mumkin. Zanjir(Linked) va Massiv.
Zanjir yoki Linked Stek. Stekdagi barcha element o’zidan keyingi elementga
bo’glangan bo’ladi va ushbu ketma-ketlik yordamida stekdagi “top” elementni
aniqlab olamiz. Ushbu usulda yaratilga Stekning vaqt murakkabligi quyidagi
jadvalda berilgan.
Barcha amallarni asosini o’zlashtirish amali tashkil qilgani sababi barcha metodlar
\(O(1)\) vaqtda bajariladi.
Massivga asoslangan Stek. Massivning qulayliklaridan biri bu indeks orqali
massivda joylashgan elementni vaqtda qaytara olishdir. Lekin massivdagi
elementlar soni ko’payib ketsa qimmatbaho amal – hajmni kengaytirish lozim
bo’ladi. O’z hajmini o’zi o’zgartira oladigan massiv dinamik massiv deyiladi.
Nazariyaga ko’ra Push(T value) O(n) bu eng yomon holatdur, lekin Resize()ning
chaqirilish ehtimolligi har chaqirilgandan so’ng pasayib boradi. Natijada,
yuqoridagi metodni vaqt murakkablikka ega deb qabul qilishimiz mumkin.
4. Misollar
Merge Sort algoritmi va uning ishlash prinsipi
"Ajrat va hukmronlik qil" usulining eng mashhur saralash algoritmlaridan biri
Merge Sort (Birlashtirib saralash)dir. Merge Sort algoritmi bu saralanmagan
massivni taqqoslashga asoslangan holda saralovchi algoritm bo'lib, uning ishlash
printsipida to'liq ajrat va hukmronlik qil g'oyasini uchratish mumkin.
Demak, merge sort algoritmi asosiy ikkita qismdan iborat:

Berilgan massivni rekursiv holda teng ikkita qismlarga bo'lib chiqish. Bu
qadam, qism massivlar uzunligi 1 ga (yoki undan kichik) teng bo'lib qolguncha
davom etadi.

Hosil bo'lgan massivlarni qaytib birlashtirib chiqish va bir vaqtning o'zida
hosil bo'luvchi massiv saralangan bo'lishini ta'minlash.
Merge sort algoritmi qanday ishlashini vizual tasavvur qilish uchun quyidagi
rasmga e'tibor bering. Unda amallar tartibi ham ko'rsatib qo'yilgan.
Ko'rib turganingizdek algoritm ishlash prinsipini tushunish uchun unchalik
ham murakkab emas. Va yana e'tibor bergan bo'lsangiz, birinchi bo'linishdan
keyingi massivning chap va o'ng qismlarida asosiy massiv bilan bir xil amal
profiliga kirmoqchi. Bunda Facebook foydalanuvchi loginini chiziqli
qidirishdan foydalanib tekshiradigan bo'lsa va bunda kompyuter sekundiga 10⁶ ta
loginni tekshirgan taqdirda ham, o'sha foydalanuvchi profiliga kirishi uchun 1000
soniya (16.6 daqiqa) kutishi kerak bo'lardi. Shu sababli ham bunday holatlar uchun
bizga samaraliroq algoritmlar kerak bo'ladi.
Ikkilik qidirish algoritmining ishlash prinsipi
Ikkilik qidirish algoritmini ishlash prinsipini tushunish uchun keling
kompyuter bilan o'yin o'ynab ko'ramiz. O'yin shartlari quyidagicha:
1. Kompyuter 1 dan 100 gacha ixtiyoriy son tanlaydi. Sizning vazifangiz shu
sonni iloji boricha kam taxmin ishlatgan holda topish.
2. Har bir taxmindan keyin kompyuter sizga sizning taxminingiz kompyuter
o'ylagan sondan katta yoki kichikligini aytadi.
3. Agar sizning taxminingiz kompyuter o'ylagan son bilan bir xil bo'lsa, o'yin
tugaydi.
Xo'sh, bunda kamroq yo'l tutish uchun nima qilgan bo'lar edingiz?
Albatta, birinchi navbatda o'rtadagi sonni taxmin qilib ko'ramiz, ya'ni 50 ni
Aytaylik kompyuter bizga taxminimiz o'ylangan sondan kichikroq ekanligini
aytdi. Demak, endi biz 50 va undan kichik barcha son o'ylangan sondan kichik
ekanligini bilamiz. Shunday qilib, bizning qidirish sohamiz ikki baravarga
qisqaradi (50 ta son). Huddi shu tarzda davom etamiz. Endi 51 dan 100 gacha
sonlar o'rtasidagi sonni olamiz, ya'ni 75 ni(6.5-rasm).
Kompyuter bizga 75 o'ylangan sondan katta ekanligini aytdi. Demak, 75 dan
katta barcha sonlar ham o'ylangan sondan katta ekan. Shunday qilib, bizdagi
qidirish sohasi yana ikki baravarga qisqardi (25 ta son). Huddi shunday davom
etib, biz o'ylangan sonni topishimiz mumkin(6.6-rasm).
Sonlar 100 ta bo'lgan holatda, biz har qanday tahminni ko'pi bilan 7 ta
qadamda topishimiz mumkin bo'ladi. Ikkilik qidirish algoritmi ham huddi shunday
prinsipda ishlaydi!
Algoritm qadamlari
Ikkilik qidirish algoritmi to'g'ri ishlashi uchun massiv saralangan bo'lishi
shart! Bizda n ta elementli saralangan massiv bor va biz undan x elementni
qidirmoqdamiz. Biz qidirish chegarasini belgilash uchun l (left) va r
(right) ko'rsatkichlardan foydalanamiz. Ular massiv indekslarini ko'rsatib
turadi. mid o'zgaruvchi bizda qidirilayotgan sohaning o'rtadagi elementi indeksini
ko'rsatadi
1. Avvaliga l = 0 va r=n-1 bo'ladi (butun boshli massiv)
2. O'rtadagi element indeksi hisoblanadi: mid = (l + r)/2;
3. O'rtadagi element indeksi bilan qidirilayotgan son x solishtirib ko'riladi
4. Agar son mos kelsa, algoritm shu joyida to'xtaydi.
5. Agar x o'rtadagi sondan katta bo'lsa, left ko'rsatkichni o'rtadan bitta keyingi
elementga suramiz: l=mid + 1;
6. Agar x o'rtadagi sondan kichik bo'lsa, right ko'rsatkichni o'rtadan bitta
oldingi elementga suramiz: r=mid — 1;
7. 2-qadamga qaytiladi.
Ikkilik qidirish algoritmi har bir qadamda n ni ikki baravarga kamaytirgani
uchun algoritm ishlash tezligi O(logn) hisoblanadi. Solishtirish uchun Facebook
misolidagi 1 mlrd login ichidan ikkilik qidirish algoritmi 30 ta (!) qadam bilan
topishi mumkin. Oddiy qidirishdan tashqari bu algoritmni yana boshqa juda ko'p
joyda qo'llash mumkin.
Xulosa
Xulosa qilib aytganda , bugungi kunda kesh-xotira «piramidali» o‘rnatiladi.
Tezligi bo‘yicha eng tezkor, lekin hajmi bo‘yicha eng kichik birinchi darajali keshxotira protsessor kristalli tarkibiga kiradi. Ularni protsessor registrlari
tayyorlanadigan texnologiya bo‘yicha tayyorlashadi, natijada u juda qimmat, lekin
juda tezkor va eng asosiysi ishonchli bo‘lib qoldi. Uning o‘lchami atigi bir necha
o‘n Kbayt bilan o‘lchanadi, lekin u tez ishlov berishda juda katta ahamiyatga ega.
Ikkinchi daraja kesh-xotirasi protsessorning o‘sha kristallining o‘zida joylashishi
mumkin .
Foydalanilgan adabiyotlar
1. Кленберг Дж.,Тардос Е.”Алгоритмы.Разработка и применение”.2016г.
2. Кормен Т.,Лейзерсон Ч.,Ривест Р.«Алгоритмы.Построение и
анализ»,2013г.
3. Колдаев. Основы_алгоритмизации_и программирования. 2013 г.
4. Г.Уоррен «Алгоритмические трюки для программистов», 2014 г.
Скачать