Samarqand davlat universiteti raqamli texnologiyalar fakulteti amaliy matematika



Download 0,74 Mb.
bet12/13
Sana16.01.2022
Hajmi0,74 Mb.
#376950
1   ...   5   6   7   8   9   10   11   12   13
Bog'liq
davlat

Algoritm tahlili

Algoritm tahlilini, qo‘yilgan masalani ushbu algoritm bilan yechish qancha vaqt talab qilishi deb tasavvur qilish mumkin. Har bir qaralayotgan algorimtni N o‘lchovli boshlang‘ich m a’lumotlar massividagi masalalaming qanchalik tez yechilishi bilan baholaymiz. Masalan, saralash algoritmi N ta qiymatdan iborat ro'yxatni o‘sish tartibida joylashtirish uchun qancha taqqoslash talab qiladi yoki N*N oicham li ikkita matritsani ko‘paytirishda qancha arifmetik amallar zarurligini hisoblash. Bitta masalani turli algoritmlar bilan yechish mumkin. Algoritmlar tahlili bizga algoritmni tanlash uchun qurol bo‘ladi. To‘rtta qiymatdan eng kattasini tanlaydigan ikkita algoritmni qaraymiz:

Ko‘rinib turibdiki, qaralayotgan algoritmlarning har birida uchta taqqoslash bajariladi. Birinchi algoritmni o‘qish va tushunish oson, ammo kornpyuterda bajarilish nuqtayi nazaridan ulaming murakkablik darajalari teng. Bu ikki algoritm vaqt nuqtayi nazaridan teng, lekin birinchi algoritm largest nomli qo‘shimcha o ‘zgaruvchi hisobiga ko‘proq xotira talab qiladi. Agarda son yoki belgilar taqqoslansa, ushbu qo'shimcha o‘zgaruvchi katta ahamiyatga ega bo‘lmavdi, lekin boshqa turdagi ma'lumotlar bilan ishlaganda bu muhim ahamiyatga ega. Ko‘plab zamonaviy dasturlash tillari katta va murakkab obyektlarni yoki yozuvlarni taqqoslash operatoriarini aniqlash imkonini beradi. Bunday holiarda qo‘shimcha o‘zgaruvchilami joyiashtirish katta joy talab qiladi. Algoritmlaming efTektivligini tahlil qilishda bizni birinchi navbatda vaqt masalasi qiziqtiradi, ammo xotira muhim rol o‘ynaydigan vaziyatda uni ham muhokama qilamiz. Algoritmiaring turli

Kompyuter fanida ular algoritmlarni tahlil qilishda ishlatiladi va ma'lum bir muammoning hajmiga qarab elementar qadamlar yoki saqlash birliklari sonini o'lchashni ta'minlaydi. Muammolarni "murakkab" yoki ularni hal qilish uchun vaqt sarflaydigan deb tasniflash uchun ishlatiladigan murakkablik nazariyasi. "Oson" vazifalar uchun ish vaqti polinom bilan cheklangan bo'lishi mumkin bo'lgan algoritm mavjud ; "murakkab" - bu eksponentdan ko'ra sekinroq o'sadigan algoritm topilmagan muammo



1. Bsohlash.

2. a va b kiritilsin.

3. a*b hisoblansin va s ga ta’minlansin.

4. a/b hisoblansin va d ga ta’minlansin.

5. s va d ekranga chiqarilsin.

6. tamom



tamom

s,d

a , b

s= a*b

d=a/b


boshlash



#include
using namespace std;
int main()

{

int a,b,s,d;



cout<< "a="; cin>>a;

cout<< "b="; cin>>b;

s=a*b;

d=a/b;


cout<< "kopaytma: "<

cout<< "bo'linma: "<

return 0;

}


a va b sonlari ko’paytmasi va bo’linmasini topuvchi dastur tuzilsin. (Chiziqli dastur)

Algoritmning xossalari bitta masalani yechuvchi ikki turdagi algoritmlarning effektivligini taqqoslash uchun xizmat qiladi. Biz shuning uchun hech qachon matritsalarni ko‘paytirish algoritmi bilan saralash algoritmini emas, balki ikkita turli saralash algoritmlarini bir-biri bilan taqqoslaymiz. Algoritm tahlilining natijasi - belgilangan algoritmning kompyuterdan qancha vaqt yoki takrorlash talab qilishini aniq hisoblovchi formula emas. Bunday ma'lumot muhim emas, bu holatda kompyuter turi, u bitta yoki undan ortiq foydalanuvchi tomonidan ishlatilyaptimi, uning protsessori va chastotasi qanaqa, protsessor chipida komandalar to‘liqmi va kompilyator bajarilayotgan kodni qay darajada amalga oshirmoqda kabi tomonlarni nazarda tutishni kerak. Bu shartlar algoritm bajarilish natijasida dastuming ishlash tezligiga ta’sir qiladi. Yuqoridagi shartlar hisobiga dasturni boshqa tez ishlaydigan kompyuterga o'tkazilganda algoritm yaxshi ishlaganday bajarilishi tezroq amalga oshadi. Aslida esa unday emas, biz shuning uchun tahlilimizda kompyuterning imkoniyatlarini inobatga olmaymiz. Oddiy va katta bo‘lmagan dasturlarda bajariladigan amallar sonini N ning funksiyasi ko‘rinishida aniq hisoblash mumkin. 52 Aksariyat holatlarda bunga zaruriyat qolmaydi. Algoritm tomonidan bajariladigan jarayoniar borki, biz ulaming hammasini hisoblab o‘tirmaymiz, buning sababi shundaki, hatto uning eng kichik sozlashi ham samaradorlikning sezilmas yaxshilanishiga olib keladi. Fayldagi turli beigilar sonini hisoblovchi algoritmni qaraymiz. Bu masala yechimi uchun algoritmning taxminiy ko‘rinishi quyidagicha bo'ladi: for ali 256 belgilami do hisoblagichni noiga tenglash end for while agar faylda belgi qolsa do navbatdagi belgini ko‘rsat va hisoblagichni bittaga oshir end while do hisoblagichni nolga tenglashtirish end for while faylda belgi mavjud bo‘Isa do navbatdagi belgini ko'rsat va hisoblagichni bittaga oshir end while Ushbu algoritmni ko‘rib chiqamiz. U takrorlanish bajarilishida 256 ta o‘tish qiladi. Agar berilgan faylda N ta belgi bo‘lsa unda ikkinchi takrorlanishda N ta o‘tish qilinadi. «Bu qanday hisoblash?» degan savol tug‘iladi. For siklida avval sikl o‘zgaruvchisi bajariladi, keyin har bir o‘tishda uning sikl chegarasidan chiqmayotganligi tekshiriladi va o‘zgaruvchi qiymatini oshiradi. Bu esa sikl bajarilishida 257 ta yuklash bajariladi (biri sikl o‘zgaruvchisi, 256 tasi hisoblagich uchun), ya’ni 256 ta oshirish va 257 ta sikl chegarasidan chiqmaganligini tekshirish (bitta amal siklni to‘xtatish uchun qo'shilgan). Ikkinchi siklda N + 1 marta shart tekshiriladi (+1 fayl bo‘sh bo‘lgandagi oxirgi tekshiruv), va N hisoblag.

Endi boshqa tomoniga e’tibor qaratamiz. Kompyuterda ma’lumotlar bilan shunday ishlashga m o‘ljallanganki, katta hajmdagi m a’lumotlar blokini ko‘chirish va yuklash bir xil tezlikda amalga oshiriladi. Shuning uchun biz avval 16 ta hisoblagichga boshlang'ich qiymat 0 ni yuklaymiz, keyin qolgan hisoblagichlami to‘ldirish uchun shu blokdan 15 ta nusxa olamiz. Bu esa sikl bajarilish davomida tekshirishlar sonini 33 ga, yuklashlar sonini 33 va oshirishlar sonini 31 ga kamayishiga olib keladi. Demak amal bajarilishlar soni 770 dan 97 gacha kamaydi, ya’ni 87%. Agar erishilgan natijani 50000 belgidan iborat fayl ustida bajarsak, tejamkorlik 0,7% ni tashkil qiladi (100771 ta amal o‘miga 100098 amal bajaramiz). Agarda barcha amallami sikldan foydalanmay 31 ta yuklashlar orqali bajarganimizda, vaqtni yanada tejagan bo‘lardik, ammo bu usul 0,07 foyda keltiradi. Ishimiz unumli bo'lmaydi. Ko‘rib turganimizdek, algoritmning bajarilish vaqti bilan bogMiq barcha amallar befoyda. Tahlil tili bilan aytganda, boshlang‘ich m a’lumotlar hajmining ortishiga alohida e’tibor qaratish kerak. Avvalgi ishlarda algoritmlami tahlil qilishda algoritmlami Tyuring mashinasida hisoblash aniqlangan. Tahlilda masalani yechish uchun zarur boMgan o ‘tishlar soni hisoblangan. Bu turdagi tahlil to‘g‘ri bo‘lib, ikki algoritmning nisbiy tezliklarini aniqlash imkonini beradi, ammo uning amaliyotda qo‘llanilishi kam, chunki ko‘p vaqt talab qiladi. Avval bajariladigan algoritmning Tyuring mashinasidagi o‘tish funksiyalarini yozish, keyin esa bajarilish vaqti hisoblanadi. Algoritmlami tahlil qilishning boshqa yaxshiroq usuli - uni biror yuqori bosqichli til Pascal, C, C++, JAVA da yozish yoki oddiy psevdokodlarda yozishdir. Barcha aIgoritmlaming asosiy boshqaruv strukturasini ifodalaganda psevdokodlaming xossalari ahamiyatga ega emas. Ixtiyoriy til bizning talabimizga javob beradi, chunki for yoki while shaklidagi sikllar, if, case yoki switch ko‘rinishidagi tarmoqlanish mehanizmlari barcha dasturlash tillarida mavjud. Har gal biz bitta aniq algoritmni ko‘rib chiqishimizga to ‘g‘ri keiadi - unda birdan ortiq funksiya yoki programma fragmenti kiritilgan bo'ladi, shuning uchun yuqorida keltirilgan 54 tillaming tezligi umuman muhim emas. Psevdokodlardan foydalanishimizning sababi shunda. Ko‘plab dasturlash tillarida mantiqiy ifodaning qiymatlari qisqartirilgan shaklda hisoblanadi. Bu A and V ifodadagi V hadning qiymati qachonki A rost bo‘lsagina hisoblanadi, aks holda natija V ga bog‘liq bo'lmagan tarzda yolg'on bo‘ladi. Xuddi shunday A or V ifodada A ning qiymati rost bo‘Isa, V hadning qiymati hisoblanmaydi. Ko‘rinib turibdiki, murakkab shartlaming 1 yoki 2 ga tengligidagi taqqoslashlarining sonini hisoblash shart emas.

Algoritm tahlilida bir qancha funksiyadan foydalanish m um ­ kin. M asalan, bajarish vaqti N3 bo'lgan N2 li kiritilgan algoritmni N*/2 algoritm sifatida qarash ham mumkin. Bundan tashqari ba’zi bir 2 qism m asalaga bo'linuvchi algoritmlar Nlog2 N bajarish vaqtiga proportsional bo'ladi.

Yilda Kompyuter fanlari, algoritmlarni tahlil qilish ni topish jarayoni hisoblash murakkabligi algoritmlar - vaqt, saqlash yoki boshqa manbalar miqdori ularni ijro eting. Odatda, bu a ni o'z ichiga oladi funktsiya algoritm kiritish uzunligini va uni bajaradigan qadamlar soniga bog'laydigan (uning vaqtning murakkabligi) yoki u foydalanadigan saqlash joylari soni (uning kosmik murakkablik). Algoritm ushbu funktsiya qiymatlari kichik bo'lganda yoki kirish hajmining o'sishiga nisbatan sekin o'sganda samarali bo'ladi deyiladi. Xuddi shu uzunlikdagi turli xil yozuvlar algoritmning xatti-harakatlariga olib kelishi mumkin, shuning uchun eng yaxshi, eng yomon va o'rtacha ish tavsiflarning barchasi amaliy qiziqish uyg'otishi mumkin. Agar boshqacha ko'rsatilmagan bo'lsa, algoritmning ishlashini tavsiflovchi funktsiya odatda yuqori chegara, algoritmga eng yomon holatlardan aniqlandi.Ba'zida samaradorlikning aniq (asimptotik bo'lmagan) o'lchovlari hisoblab chiqilishi mumkin, ammo ular odatda algoritmni amalga oshirishda ma'lum taxminlarni talab qiladi, deyiladi hisoblash modeli. 

"Algoritmlarni tahlil qilish" atamasi tomonidan kiritilgan Donald Knuth. Algoritmni tahlil qilish keng doiraning muhim qismidir hisoblash murakkabligi nazariyasi, bu berilganni hal qiladigan har qanday algoritm uchun zarur bo'lgan manbalar uchun nazariy baholarni beradi hisoblash muammosi. Ushbu taxminlar izlashning oqilona yo'nalishlari to'g'risida tushuncha beradi samarali algoritmlar.

Algoritmlarni nazariy tahlil qilishda ularning murakkabligini asimptotik ma'noda baholash, ya'ni o'zboshimchalik bilan katta kirish uchun murakkablik funktsiyasini baholash odatiy holdir. Big O notation, Katta-omega yozuvlari va  shu maqsadda ishlatiladi. Masalan; misol uchun, ikkilik qidirish qidirilayotgan tartiblangan ro'yxat uzunligining logarifmiga mutanosib bo'lgan bir necha bosqichda yoki O (log (n)) da, so'zma-so'z " logaritmik vaqt". Odatda asimptotik taxminlar har xil bo'lgani uchun ishlatiladi amalga oshirish bir xil algoritm samaradorligi bilan farq qilishi mumkin. Ammo berilgan algoritmni istalgan ikkita "oqilona" amalga oshirish samaradorligi a deb nomlangan doimiy multiplikativ omil bilan bog'liq. yashirin doimiy.

Ba'zida samaradorlikning aniq (asimptotik bo'lmagan) o'lchovlari hisoblab chiqilishi mumkin, ammo ular odatda algoritmni amalga oshirishda ma'lum taxminlarni talab qiladi, deyiladi hisoblash modeli. 

Algoritmlarni loyihalash va varatishning yana bir usuli moaulli usul hisoblanadi. Modul -b u nomga ega biror algoritm yoki uning bir qismi bo'lib, bu nom orqali uni faollashtirih mumkin. K o‘p holiarda modulni ham ixtiyoriy algoritmga xos bo'lgan yordamchi algoritm nomi bilan ham yuritishadi. M odul xossalari: • Funksional butunlik va tugatuvchanlik; • Avtonom va boshqa modulga bog'liq bo‘lmaslik; • Rivojlanuvchanlik; • Yaratuvchi va foydalanuvchiga ochiqligi; • Aniqlik va ishonarlilik; • M oduldan fovdalanishda faqat uning nomiga m urojaat qilish orqali foydalanish; Algoritmlarni modulli loyihaiashning afzalliklari: . Katta hajmdgi algoritmlarni loyihalashda qulayligi; • K o‘p foydalanadigan algoritm lar kutubxonasini yaratish; • Loyihalash va moslashtirish jarayonini soddalashtirish; . Ulardan foydalanish jarayonini kuzatish imkoniyati; 3-masalci. Kiritilgan n soni uchun “sonli romb" quyidagicha yaratiladi: 1-qatorda 1 ta 1, 2-qatorda 2 ta 2, 3-qatorda 3 ta 3 va nchi qator uchun n ta n. So‘ng keyingi qatorlarda sonlar miqdori bittadan kamayib boradi. Bu jarayon bitta son qolguniga qadar davom ettiriladi.

Xulosa

Men C++ dasturi strukturasi haqida, belgilar bayoni, algoritm

va dastur tushunchasi, ma’lumotlarni kiritish va chiqarish operatorlari

hamda dasturda ishlatiladigan toifalar, ifodalar va ko’nikmalarga ega

bo`ldim. Algoritmlash va dasturlash tillari bo’yicha yozilgan bir necha

kitoblar bilan tanishib chiqdim va ulardan o’zimga kerakli malumotlarni

oldim. Kurs ishimda , To’plamlar Algoritimlarni loyhalash va tahlil qilish algoritmlarga blok sxemalar

tuzish masalalari qaralgan. Qolaversa dasturlar bilan qo’shimcha ishlash mobaynida turli masaalarga mantiqan hamda matematik yondashish haqida fikrlar mavjud bo’ldi. Quyilgan masala b’yicha algoritm ishlab chiqdim. Tuzilgan algoritm asosida C++ obyektga yo’naltirilgan dasturlash tilida ko’yilgan masalani xal qiluvchi dastur tuzdim. Tuzgan dasturimni testdan o’tkazib, uning to’g‘ri ishlayotganligiga amin bo’ldim. Bugungi kunda aksariyat dasturchilar C++ tilida dastur tuzishadi, chunki bu dastulash muxiti bu imkoniyatlari bilan boshka dasturlash tillaridan farq qiladi. Bundan tashqari ko’pgina dasturlashtirish muxitlarining fundamental asosi xam C++ tiliga borib taqaladi.

Biz algoritmlash dasturlash tillari fani texnologiyalaridan biri bulgan C++ obyektga yunaltirilgan tili bilan yakindan tanishdik. Ma’ruza darslarida olgan nazariy bilimlarimizni amaliyot darslarida mustaxkamlab oldik. Bu fan orqali qo‘lga kiritgan bilim va ko’nikmalarimiz ushbu kurs ishini tayyorlash jarayonida o‘zining ijobiy samaralarini berdi.Kurs ishim mavzusidan kelib chikib algaritmning matematik asoslar va induksiya metodi bilan ishlash bo’yicha izlanishlar olib bordim. Amin buldimki, dasturlashda matematik masalalari bilan ishlash kabi biroz murakkab, ammo dolzarb masalalar mavjud. Quyilgan masala b’yicha algoritm ishlab chiqdim. Tuzilgan algoritm asosida C++ obyektga yo’naltirilgan dasturlash tilida ko’yilgan masalani xal qiluvchi dastur tuzdim. Tuzgan dasturimni testdan o’tkazib, uning to’g‘ri ishlayotganligiga amin bo’ldim. Bugungi kunda aksariyat dasturchilar C++ tilida dastur tuzishadi, chunki bu dastulash muxiti bu imkoniyatlari bilan boshka dasturlash tillaridan farq qiladi. Bundan tashqari ko’pgina dasturlashtirish muxitlarining fundamental asosi xam C++ tiliga borib taqaladi. Nazariyada o‘rganilgan shu turdagi masalalarni echish kelajakda yuqori saviyali dasturlar tuzishda asos bo‘lib qoladi desak mubolag‘a bo‘lmaydi. Aytish mumkinki, C++ tili zamonaviy dasturlash texnologiyalarining takomillashgan kurinishlaridan biridir va bu dasturlash tilida algaritmning matematik asoslari va induksiya metodini qo’llashda C++ muxiti judda qulaydi


Download 0,74 Mb.

Do'stlaringiz bilan baham:
1   ...   5   6   7   8   9   10   11   12   13




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish