ALGORITM VA MA’LUMOTLAR STRUKTURASI
![ALGORITM VA MA’LUMOTLAR STRUKTURASI fanidan yozgan
Tekshirdi:_____________________________
MUSTAQIL ISHI](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_1.png)
![1-mustaqil ish
Mavzu: Ma’lumotlar tuzilmasi,tuzilmalar ustida bajariladigan amallar.
Dasturlash texnologiyalari.
Reja:
1.Ma’lumotlar tuzilmasi
2. Ma’lumotlar tuzilmalari ustida quyidagi amallarni bajarish mumkin:
Ma’lumotlar tuzilmasi bu xotirada tashkil etiladigan elementlar yig’indisi bo’lib, ular
ustida dastur yordamida amallar bajariladi.
Ma’lumotlar tuzilmasi – bu bironta toifaga tegishli bo’lgan va o’zaro ma’lum
munosabatga ega bo’lgan elementlar to’plamiga aytiladi.
Ma’lumot – bironta qiymat yoki qiymatlar to’plami hisoblanadi.Misol uchun bu bironta
eksperiment natijalari, yoki talabalarning imtixon ballari bo’lishi mumkin.
Ma’lumotlar tuzilmasi elementi – bu qiymatlar to’plamining bir bo’lagi hisoblanadi.
Tuzilma elementi – qiymatlar jamlanmasi bo’lib, misol uchun talabalarning ismi, sharifi,
yoshi har bir fandan olgan bahosi va x.k. larni keltirish mumkin.
Elementlar 2 taga bo’linishi mumkin:
Element sifatida ma’lumotlar guruhi olib qaraladi. Bunda e;lementlar yana qism
bo’lak;arga bo’linishi mumkin. Masalan, ota-onalar maydoni talabalarning ota va
onalari xaqida ma’lumot saqlaydigan alohida maydonlardan tashkil topadi.
Elementar, ya’ni bo’linmas, bunda element qism bo’laklarga ajratilmaydi.
Ob’ekt – bu xususiyatlar va attributlariga ega bo’lgan va bu xususiyatlarga qiymat qabul
qilishi mumkin bo’lgan tuzilma hisoblanadi. Masalan, talaba bu ob’ekt deb qaralishi
mumkin tuzilma.
Maydon – bu ob’ektlarning attributlari yoki xususiyatlarini ifodalovchi tushuncha bo’lib,
sonli yoki son bo’lmagan qiymatlarni o’zlashtirishi mumkin.
Yozuv – bu bironta ob’ektga tegishli turli toifadagi maydonlar to’plamidir.
Fayl - bu bir-biriga bog’liq bo’lgan yozuvlar to’plamidir. Masalan, barcha talabalar
xaqidagi yozuvlarni o’z ichiga olishi mumkin,
Kalit – bu yozuvdagi maydon bo’lib, aynan shu yozuvni boshqa yozuvlardan ajratib
turishga xizmat qiladi , uning qiymati boshqa yozuvlarda takrorlanmas hisoblanadi.
Ba’zida bittadan ko’p maydonlar qiymatlari elementlararo betakror bo’lishi mumkin va
bunga karrali kalit deyiladi. Ko’pincha asosiy kalit hisoblanadigan bitta maydon
ma’lumoti ishlatiladi va u boshlang’ich kalit deyiladi, qolganlari esa alternativ
kalit deyiladi. Ba’zida esa yozuvlaning yagona qiymatlatli kalit maydonni yo’qligi sababli
kalit sifatida bir nechta maydonlar olinadi va ularga tarkibli kalit deyiladi. Eng yomon](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_2.png)
![holatda, ba’zan shunaqa bo’lishi mumkinki, bironta maydon kalit bo’la olmasa, xar bit
elementga qo’shimcha, qiymati yagona bo’lgan kalit maydon kiritiladi.
Ma’lumotlar tuzilmasi
Ma’lumotlar turli yo’lar asosida tashkil etilishi mumkin, mantiqiy yoki matematik modelni
tashkil etilishi ma’lumotlar tuzilmasi deyiladi. Konkret bir ma’lumotlar tuzilmasini tanlash
quyidagilarga bog’liq:
Real voqe’likda elementlararo munosabatni yaqqol ifodalay olishi kerak;
U shunday soda tuzilishi kerakki, zarur bo’lganda ustida samarali amal bajarish
mumkin bo’lsin.
Ma’lumotlar tuzilmasini o’rganish quyidagilardan iborat:
Tuzilmani mantiqiy ifodalash;
Tuzilmani fiizik amalga oshirish ;
Tuzilmani sifatiy taxlili, ya’ni elementlarni saqlash uchun qancha xotira xajmi
sarflanishini aniqlash (xotira sarfi) va qayta ishlashga ketadigan vaqtni (vaqt sarfi)
xisoblash nazarda tutiladi.
Ma’lumotlar tuzilmalari ustida quyidagi amallarni bajarish mumkin:
1.
Ko’rikdan o’tkazish (traversing) - tuzilma elementlariga 1 martadan murojaat qilish
amali.
2.
Kiritish – tuzilmaga yangi element kiritish amali.
3.
O’chirish – tuzlmadan bironta elementni o’chirish amali. Bunda element shunday
o’chirilishi kerakki, qolgan elementlar stabil holatda bo’lishi kerak, ya’ni ayrim
tuzilmalarda nosozlik sezilishi kerak emas.
4.
Qidirish – tuzilmadan bironta elementni joylashgan o’rnini aniqlash amali.
5.
Saralash – elementlarni ma’lum bir tartibda joylashtirish amali.
6.
Birlashtirish (merging) – ikkita tuzilmani birlashtirish amali.
Ma’lumotlar tuzilmasi (MT) – informatsion ob’ektning umumiy xossasi bo‘lib, mazkur
xossa bilan biror bir dastur o‘zaro aloqador bo‘ladi. Ushbu umumiy xossa quyidagilar
orqali tavsiflanadi:
1) mazkur tuzilmaning mumkin (qabul qilishi mumkin) bo‘lgan qiymatlari to‘plami;
2) mumkin bo‘lgan amallar (operatsiyalar) majmuasi;
3) tashkil etilganlik tasnifi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_3.png)
![2-mustaqil ish
Mavzu: Algoritmlarni murakkablik darajalasining tahlili, murak-kablik darajasini
baholash usullari.
Reja:
1 Algoritmning asosiy xossalari
2 Algoritmlarning murakkabligi .
3 Murakkablikni baholash
4 Algoritmlar murakkabligining o sish tartibiʻ
1-ta’rif. Algoritm - bu ma’lum bir tilda berilgan, mumkin bo lgan dastlabki
ʻ
ma’lumotlar sinfi uchun masalani hal qilish uchun mumkin bo lgan elementar amallarning
ʻ
cheklangan ketma-ketligi.
Algoritmning asosiy xossalari haqida quyidagilarni ta’kidlash mumkin:
1-xossa . Diskretlilik, ya’ni algoritmni chekli sondagi oddiy ko rsatmalar ketma-
ʻ
ketligi shaklida ifodalash mumkin.
2-xossa. Tushunarlilik, ya’ni ijrochiga tavsiya etilayotgan ko rsatmalar uning uchun
ʻ
tushunarli bo lishi shart, aks holda ijrochi oddiy amalni ham bajara olmay qolishi mumkin.
ʻ
Har bir ijrochining bajara olishi mumkin bo lgan ko rsatmalar tizimi mavjud.
ʻ ʻ
3-xossa. Aniqlik, ya’ni ijrochiga berilayotgan ko rsatmalar aniq mazmunda bo lishi
ʻ ʻ
lozim hamda faqat algoritmda ko rsatilgan tartibda bajarilishi shart.
ʻ
4-xossa . Ommaviylik, ya’ni har bir algoritm mazmuniga ko ra bir turdagi
ʻ
masalalarning barchasi uchun yaroqli bo lishi lozim
ʻ . Masalan, ikki oddiy kasr umumiy
maxrajini topish algoritmi har qanday kasrlar umumiy maxrajini topish uchun ishlatiladi.
5-xossa. Natijaviylik, ya’ni har bir algoritm chekli sondagi qadamlardan so ng
ʻ
albatta natija berishi lozim .
Bu xossalar mohiyatini o rganish va konkret algoritmlar uchun qarab chiqish
ʻ
talabalarning xossalar mazmunini bilib olishlariga yordam beradi.
Algoritmlar berilishi va ifodalanishiga qarab: chiziqli, tarmoqlanuvchi va
takrorlanuvchi turlarga bo linadi.
ʻ
Algoritmlarning murakkabligi . Hisoblash muammolari cheklangan xotira resurslaridan
foydalangan holda oqilona vaqt ichida yechilishi kerak. Bu algoritmning vaqt va fazoviy
murakkabligi tushunchasiga olib keladi. Qoida tariqasida, algoritm turli vaqtlarni bajarishi
mumkin bo lgan turli xil amallarni o z ichiga oladi. 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 kattaligig
ʻ ʻ ʻ
xizmat qilishi mumkin. Graflar haqidagi masalada o lcham sifatida graf
ʻ uchlarining 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.
ʻ
Murakkablikni baholash . Algoritmlarning murakkabligi odatda bajarilish vaqti yoki
ishlatilgan xotira bo yicha baholanadi. Ikkala holatda ham, murakkablik kiritilgan
ʻ
ma’lumotlarning hajmiga bog liq: 100 ta elementdan iborat massivi xuddi shunga
ʻ
o xshash 1000 ta elementdan iborat massivga qaraganda tezroq qayta ishlanadi. Shu bilan
ʻ
birga, aniq vaqt bilan bir necha kishi qiziqadi: bu protsessorgabog liq, ma’lumotlar turi,
ʻ](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_4.png)
![dasturlash tili va boshqa ko plab parametrlarga ham bog liq. Faqatgina ʻ ʻ asimptotik
murakkablik muhim, ya’ni kirish ma’lumotlarining kattaligi cheksizlikka intilayotgandagi
murakkablik. Masalan, ba’zi bir algoritmga kirish ma’lumotlarining n ta elementlarini
qayta ishlash uchun 4n 3
+ 7n ta shartli amallarni bajarish kerak. n ning ortishi bilan ishning
umumiy davomiyligi n ning kubi uni 4 ga ko paytirgandan yoki 7n ni qo shgandan ko ra
ʻ ʻ ʻ
ko proq ta’sir qiladi. Ushbu algoritmning vaqt murakkabligi O(n
ʻ 3
), ya’ni u kubik bilan
kiritilgan ma’lumotlarning hajmiga bog liq bo ladi. Bosh harf
ʻ ʻ O dan foydalanish
matematikadan kelib chiqadi, bu yerda ushbu belgi funksiyalarning asimptotik
harakatlarini taqqoslash uchun ishlatiladi. Rasmiy ravishda O(f(n)) algoritmning ishlash
vaqti (yoki egallagan xotira miqdori), kiritilgan ma’lumotlarning hajmiga qarab, f(n) ga
ko paytiriladigan ba’zi konstantalardan tezroq emasligini anglatadi.
ʻ O (n) - chiziqli
murakkablik. Bunday murakkablik, masalan, saralanmagan massivdagi eng katta
elementni topish algoritmiga ega. Qaysi biri maksimal ekanligini aniqlash uchun
massivning barcha n elementlaridan o tishimiz kerak bo ladi.
ʻ ʻ O (log n) - logaritmik
murakkablik . Eng oddiy misol - ikkilik qidirish. Agar massiv saralangan bo lsa, uni
ʻ
yarmiga bo lish orqali ma’lum bir qiymatga ega ekanligini tekshirishimiz mumkin. O rta
ʻ ʻ
elementni tekshirib ko ramiz, agar u kattaroq bo lsa, unda massivning ikkinchi yarmini
ʻ ʻ
tashlab yuboramiz. Agar kichikroq bo lsa, unda aksincha - biz dastlabki yarmini
ʻ
tashlaymiz va shu tarzda ikkiga bo linishni davom ettiramiz, natijada (logn) elementlarini
ʻ
tekshiramiz. O (n 2
) - kvadratik murakkablik. Bunday murakkablik,
masalan, element qo shilishi natijasida yangi saralash algoritmiga ega. Kanonik dasturda
ʻ
bu ikkita ichki sikldan iborat: biri butun massivni bosib o tish, ikkinchisi esa allaqachon
ʻ
ajratilgan qismdan keyingi element uchun joy topish. Shunday qilib, amallar soni n*n,
ya’ni n 2
kabi massiv o lchamiga bog liq bo ladi.
ʻ ʻ ʻ Murakkablikning boshqa ko rinishlari ʻ
ham mavjud, ammo ularning barchasi bir xil prinsipga asoslanadi. Algoritmning ishlash
vaqti umuman kiritilgan ma’lumotlarning hajmiga bog liq emasligi ham sodir bo ladi. Bu
ʻ ʻ
holda murakkablik O(1) bilan belgilanadi. Masalan, massivning uchinchi elementi
qiymatini aniqlash uchun elementlarni eslab qolishingiz yoki ular orqali bir necha bor
o tishingiz shart emas. Siz har doimma’lumotlarni kiritish oqimidagi uchinchi elementni
ʻ
kutishingiz kerak va bu esa siz uchun natija bo ladi, bu har qanday ma’lumot uchun
ʻ
hisoblash uchun bir xil vaqtni oladi. Baholash muhim bo lgan taqdirda xotiradan xuddi
ʻ
shu tarzda amalga oshiriladi. Biroq, algoritmlar kirish ma’lumotlarining hajmi boshqalarga
nisbatan kattalashganda sezilarli darajada ko proq xotiradan foydalanishi mumkin, ammo
ʻ
ular tezroq ishlaydi va aksincha. Bu hozirgi sharoit va talablar asosida muammolarni hal
qilishning eng yaxshi usullarini tanlashga yordam beradi.
Algoritmlar murakkabligining o sish tartibi
ʻ
Murakkablikning o sish tartibi
ʻ (yoki aksiomatik murakkablik) katta kirish hajmi uchun
algoritmning murakkablik funksiyasining taxminiy xatti-harakatini tavsiflaydi. Bundan
kelib chiqadiki, vaqt murakkabligini baholashda elementar amallarni ko rib chiqishning
ʻ
hojati yo q, algoritm qadamlarini ko rib chiqish kifoya.
ʻ ʻ
Algoritm qadami – bu ketma-ket joylashtirilgan elementar amallar to plami, uning
ʻ
bajarilish vaqti kirish qadamiga bog liq emas, ya’ni yuqoridan qandaydir doimiy bilan
ʻ
chegaralangan.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_5.png)
![Asimptotik baholashning ko rinishlari. ʻ F(n)>0 murakkabligini, bir xil tartibdagi g(n)>0
funksiyasini, kirish n>0 o lchamini ko rib chiqaylik. Agar f(n) = O (g(n)) va n> n
ʻ ʻ
0 uchun
c>0, n
0 > 0 konstantalar mavjud bo lsa, u holda 0 <f(n)<c*g(n).
ʻ
Bu holda g(n) funksiyasi f(n) uchun asimptotik-aniq baho hisoblanadi. Agar f(n)
algoritmning murakkablik funksiyasi bo lsa, unda murakkablik tartibi f(n) uchun - O(g(n))
ʻ
deb belgilanadi. Ushbu ibora doimiy koeffitsiyentgacha g(n) dan tez o smaydigan
ʻ
funksiyalar sinfini belgilaydi.
Misollardan namunalar:
1-Misol. Kiritilgan 2 ta qiymat (k,l; k<l) oralig’idagi sonlar kvadratlari yig’indisi
o’rtachasini hisoblash dasturini tuzing
#include <iostream>
using namespace std;
int main()
{ int k,l;
cout<<”boshlang’ich qiymatni kiriting=”;
cin>>k;
cout<<”oxirgi qiymatni kiriting=”;
cin>>l;
int p=0;
for(int i=k;i<=l;i++)
p+=i*i; p/=k-l+1;
c out<<”k va l qiymatlar oralig’idagi sonlar
kvadratlari yig’indisi o’rtachasi=”<<p; system(“pause”);}
2-Misol. M natural soni mukammal deyiladi, agar uning bo’luvchilari yig’indisi (1 ham
kiradi va M ning o’zidan tashqari) M ga teng bo’lsa. Kiritilgan sonning
mukammalligini aniqlang.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int x, sum=0;
cout<<"son kiriting: ";
cin>>x;
for(int i=1; i<x;i++)
{ if(x%i==0) sum+=i; }
if(x==sum)
{cout<<"bu mukammal son"<<endl;} else](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_6.png)
![{cout<<" bu mukammal y son emas"<<endl;} }
3-Misol. Alifbo xarflarini chiqaring va kiritilgan so’zning xarflarini o’sish tartibida
saralang.
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{ for(char c='a';c<='z';c++) cout<<c<<(char)(c-32)<<" ";
char s[34];
cout<<endl<<"so'z kiriting ";
cin>>s;
for(int i=0;i<strlen(s)-1;i++)
for(int j=i+1;j<strlen(s);j++) if(s[i]>s[j]) swap(s[i],s[j]);
cout<<s; return 0; }
4-misol. Ikki son berilgan. Ularning musbat ekanligini tekshiring.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ bool x; int a,b;
cin>>a>>b;
x=a>0&&b>0;
cout<<x;
return 0; }
5-misol. Kiritilgan belgining nimaligini aniqlovchi programma tuzilsin. Agar belgi
raqam bo’lsa –“digit”, lotincha harf bo’lsa-“lotin” yozuvi chiqarilsin. Boshqa
holatlarda nol chiqarilsin.
#include <iostream>
#include <ctype.h>
using namespase std;
int main()
{char a; bool x,y;
cin>>a;
x=isdigit(a);
y=isalpha(a);
if (x==true) cout<<”digit”;
if (y==true) cout<<”lotin”;
else cout<<0;
return 0;}](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_7.png)
![3-mustaqil ish
Mavzu: Ma’lumotlar tuzilmasida satrli va belgili turlarni dasturlashtirish
Reja:
1 Satrlarni e’lon qilish
2 Satr uzunligini aniqlash
3 Satrlarni nusxalash
C++ dasturlash tilida bir nechta turlardan foydalanish va ular ustida amallar bajarish
mimkin, dasturlash muhitida boshqa turlar kabi belgili turlar ham mavjud. C++ dasturlash
tilida belgili turlar char turiga mansub bo‘lgan yagona elementli tur hisoblanadi. C++
dasturlash tilida satrlar uchun alohida maxsus turlar ham mavjud, lekin satrlarni belgilar
massivi sifatida ishlatish ham mumkin.
Ta’rif: Alohida nom bilan saqlanuvchi bir nechta belgilardan tashkil topgan belgilar
majmuasi satr deyiladi.
Satrlarni belgilar massivi sifatida qarab ular ustida amallar bajarish mumkin. C++
dasturlash tilida satrlar nol(‘\0’) terminatori bilan tugaydi. Nol terminatori bilan
tugaydigan satrlar ASCIIZ –satrlari deyiladi.
Satrlardan foydalanish va ular ustida amallar bajarish uchun albatta oldin ularni e’lon
qilish kerak. Satr turiga mansub bo‘lgan o‘zgaruvchilarni char xizmatchi so‘zi orqali e’lon
qilinadi. Satrlarni e’lon qilish uchun quyidagi dasturlarga etibor bering.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10]; // s satrli o‘zgaruvchini e’lon qilish
return 0;
}
Yuqoridagi dastur tarkibida s[10] satr o‘zgaruvchisi 9 ta elementga va bitta nol
terminatoriga mo‘ljallangan. Satrlarni boshlang’ich qiymatlarini berish jarayonida uning
elementlar sonini berish shart emas. Agar satrlarni elementlar soni berilmasa dastur
avtomatik ravishda uning elementlar soniga boshlang’ich qiymatdagi elementlar sonidan
bitta ortiq qilib ta’minlaydi, chunki oxiriga bitta nol terminatorini hisobga oladi. Doim
satrlarni kiritishda uning elementlar soni e’lon qilinganidan oshib ketmasligi kerak aks
holda faqat e’lon qilingan elementlar soniga teng elementlarni saqlab qolinib qolganlari
olinmaydi.
Satrlarni kiritish jarayonida >> oqim bo‘yicha kiritishdan foydalanmasdan getline()
funksiyasidan foydalanish maqsadga muvofiq bo‘ladi. Agar oqim bo‘yicha kiritishdan
foydalanilsa unda probellar inkor qilinib satrni ikkinchi qismlari qabul qilinmaydi.
getline(s,n) funksiyasi ikkita parametrni o‘z ichiga oladi, birinchisi s satr o‘zgaruvchisi
ikkinchisi n satr elementlar soni. Getline funksiyasi satr elementlaridan ortiq qiymatlarni
ham kiritish imkoniyatini yaratadi, natijada satr elementlari ortadi. Yuqoridagi dastur
tarkibidagi s satrli o‘zgaruvchi faqat 9 ta elementni qbul qiladi, agar 9 tadan ortiq bo‘lsa
natija qaytarmaydi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_8.png)
![Satr uzunligini aniqlash
Satrlar ustida amallar bajarish vaqtida albatta satrlarning uzunligi kerak bo‘ladi. Satr
uzunligini aniqlash uchun string.h kutubhonasiga murojat qilish kerak aksariyat satr
uchun ishlatiladigan funksiyalarni string.h kutubhonasiga murojat qilib ishlatishimiz
mumkin. Satr uzunligini aniqlashni ikki hil usuli mavjud.
-satr tarkibidagi mavjud elementlar sonini nol terminatorisiz aniqlash;
-satr tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan aniqlash;
Satr tarkibidagi mavjud elementlar sonini nol terminatorisiz aniqlash funksiyasining
umumiy ko‘rinishi quyidagicha bo‘ladi.
strlen(<satrli o‘zgaruvchi>);
Strlen funksiyasi o‘z tarkibiga satrli o‘zgaruvchi yoki satr uzini qabul qilishi mumkin.
Masalan strlen (“absd”) bo‘lsa uning natijasi 4 ga teng bo‘ladi.
Satr tarkibidagi elementlarga ajratilgan sonini nol terminatori bilan aniqlash uchun
sizeof(s) funksiyasidan foydaliniladi. Sizeof(s) funksiyasi s satr uchun ajratilgan
elementlar sonini aniqlaydi, s satrni 10 ta elementga moslab e’lon qilib lekin 5 ta element
kiritilsa ham sizeof funksiyasi 10 qiymatni qaytaradi. Satr tarkibidagi elementlarga
ajratilgan sonini nol terminatori bilan aniqlash funksiyasining umumiy ko‘rinishi
quyidagicha bo‘ladi.
sizeof(<satrli o‘zgaruvchi>);
Sizeof funksiyasi o‘z tarkibiga satrli o‘zgaruvchi yoki satr uzini qabul qilishi mumkin.
Masalan strlen (“absd”) bo‘lsa uning natijasi 5 ga teng bo‘ladi.
Satrlarni ixtiyoriy elementiga murojat qilish uchun doimo bitta kam qilib buyruq berish
kerak chunki satrlar belgili massiv bo‘lganligi uchun boshlang’ich element nolinchi
o‘rindan boshlanadi.
Satrlarni nusxalash
C++ dasturlash tilida satrlarni bir biriga nusxalashni bir qancha usullari mavjud. Satrlarni
nusxalash uchun strcpy() funksiyasidan foydalanish mumkin, strcpy() funksiyasining
umumiy ko‘rinishi quyidagicha bo‘ladi.
strcpy(satr1, satr2);
strcpy(satr1, satr2) funksiyasi satr2 dagi elementlarni to‘laligicha satr1 ga nusxalaydi.
Satr1 ni elementlar soni doimo satr2 elementlar sonidan katta bo‘lishi kerak.
Satrlarni nusxalash uchun strncpy() funksiyasidan foydalanish mumkin, strncpy()
funksiyasining umumiy ko‘rinishi quyidagicha bo‘ladi.
strncpy(satr1, satr2,n);
strncpy(satr1, satr2,n) funksiyasi satr2 dagi elementlarni n tasini satr1 ni boshiga
nusxalaydi. Strncpy() funksiyasini strcpy() funksiyasidan farqi satr2 ni nta elementini satr1
ni boshiga nusxalaydi.
Satrlarni ulash
Bir nechta satrlarni ulash natijasida yangi satrlarni hosil qilish mumkin. C++ dasturlash tili
tarkibida satrlarni bir biriga ulashni bir nechta usullari mavjud, satrlarni bir biriga ulab
yangi satrlar hosil qilinadi.
C++ dasturlash tilida strcat() funksiyasi yordamida satrlarni bir biriga ulash imkoniyati
mavjud, strcat() funksiyasining umumiy ko‘rinishi quyidagicha ko‘rinishda bo‘ladi.
strcat(satr1, satr2);
C++ dasturlash tilida strcat(satr1, satr2) funksiyasi satr2 ni satr1ni oxiriga ulaydi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_9.png)
![C++ dasturlash tilida strncat() funksiyasi yordamida satrlarni bir biriga faqat n ta
elementini ulash imkoniyati mavjud, strncat() funksiyasining umumiy ko‘rinishi
quyidagicha ko‘rinishda bo‘ladi.
strncat(satr1, satr2,n);
C++ dasturlash tilida strncat(satr1, satr2, n) funksiyasi satr2 ni n ta boshlang’ich
elementlarini satr1ni oxiriga ulaydi.
Misollardan namunalar:
1-Misol: Berilgan satrni ekranga chiqaring
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10];
cin.getline(s,10);
cout<<s;
return 0;
}
2- Misol: Berilgan satr tarkibidagi elementlar sonini aniqlang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[10];
cin.getline(s,10);
x=sizeof(s);
cout<<x;
return 0;
}
3- Misol: Berilgan s satr elementlarini p satrga nusxalang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p[10];
strcpy(p,s);
cout<<p;
return 0;
}
4-Misol: Berilgan s satrni teskari tartiblang.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_10.png)
![{ char s[100];
cin.getline(s,10);
cout<<strrev(s);
return 0;
}
5-Misol: Berilgan s satrdan p belgini qidiring.
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{ char s[100];
cin.getline(s,10);
char p; cin>>p;
cout<<strchr(s,p);
return 0;
}](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_11.png)
![4-mustaqil ish
Mavzu: Dinamik xotiradan foydalanish, dinamik xotirani ishlatishda ko’rsatkich
turlari
Reja:
1 Ko‘rsatkich o‘zgaruvchilar
2. Funksiyaga ko‘rsatkich
3 void ko‘rsatkichlar
4 Ko‘rsatkichlar ustida bajariladigan amallar
C++ dasturlash tilida tuzilgan dastur tarkibidagi o‘zgaruvchilar dastur komplyatsiya
qilingandan keyin kompyuter xotirasiga borib joylashadi. Komplyator dastur matnini
kompyuter xotirasiga joylashtirgandan so‘ng uning tarkibidagi o‘zgaruvchilar adresini
obeykt kod sifatida qabul qilib oladi.
C++ dasturlash tilida tuzilgan dastur tarkibidagi o‘zgaruvchilar, o‘zgarmaslar va
funksiyalar adreslarini kompyuter xotirasiga alohida saqlash va ular ustida amallar
bajarish mumkin.
Ta’rif: Qiymatlari adres bo‘lgan o‘zgaruvchilar ko‘rsatkich o‘zgaruvchilar deb ataladi.
Ko‘rsatkichlar uch xil turda bo‘ladi:
-Funksiyaga ko‘rsatkich;
-Obyektga o‘zgaruvchiga ko‘rsatkich;
-Void ko‘rsatkich.
Ko‘rsatkichlar, albatta, birorta turga bog’langan bo‘ladi, ya’ni u ko‘rsatgan adresda
ma’lum bir qiymat joylashishi mumkin va bu qiymat kompyuter xotirasidan qancha joy
egallashi oldindan ma’lum bo‘lishi kerak.
Funksiyaga ko‘rsatkich
Funksiyaga ko‘rsatkich programma joylashgan xotiradagi funksiya kodini boshlang’ich
adresini ko‘rsatadi, ya’ni funksiya chaqirilganda boshqaruv ayni shu adresga uzatiladi.
Bunda funksiya nomi bo‘yicha emas, balki funksiyaga ko‘rsatuvchi o‘zgaruvchi orqali
chaqiriladi. Funksiyani boshqa funksiyaga argument sifatida uzatish ham funksiya
ko‘rsatkichi orqali bajariladi. C++ dasturlash tilida funksiya ko‘rsatkichining yozilishi
quyidagicha.
<tur> (*<nom>)(<parametrlar ro‘yxati>);
Bu yerda *<nom> funksiya ko‘rsatkich o‘zgaruvchisi nomi.
Obyektga o‘zgaruvchiga ko‘rsatkich
C++ dasturlash tilida o‘zgaruvchiga ko‘rsatkich e’lon qilish, bunda kompyuter xotirasiga
o‘zgaruvchining adresi yoziladi. C++ tilida o‘zgaruvchi va o‘zgarmas qiymatlarga
ko‘rsatkich e’lon qilish bir xil bo‘ladi. C++ dasturlash tilida o‘zgaruvchi ko‘rsatkichining
yozilishi quyidagicha:
<tur> *<nom>;
C++ dasturlash tilida o‘zgaruvchiga ko‘rsatkich e’lon qilishni quyidagi dastur orqali
aniqlaymiz:](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_12.png)
![#include <iostream.h>
using namespace std;
int main()
{ int *a, *b;
float *i, *y;
return 0;
}
Yuqoridagi dasturda a va b butun ko ‘ rsatkichlar , i va y haqiqiy ko ‘ rsatkichlar keltirilgan .
void ko‘rsatkichlar
void ko‘rsatkichlar obyekt turi oldindan aniq bo‘lmagan holatlarda ishlatiladi. Void
ko‘rsatkichini afzalliklari unga har qanday turdagi ko‘rsatkich qiymatini yuklash mumkin.
C++ dasturlash tilida void ko‘rsatkichining yozilishi quyidagicha:
void *<nom>;
void ko‘rsatkichi sifatida e’lon qilingan ko‘rsatkichga boshqa turdagi o‘zgaruvchilarni
taminlash imkoniyati mavjud bo‘ladi.
Ko‘rsatkichlarga boshlang’ich qiymat berish
C++ dasturlash tili tarkibidagi ko‘rsatkichlarga boshlang’ich qiymatlarni berish uchun,
albatta, biror o‘zgaruvchi orqali qabul qilish maqsadga muvofiq bo‘ladi. Ko‘rsatkichlarga
boshlang’ich qiymatlarni = belgisi yoki qavs ichiga olib berilish mumkin. Ko‘rsatkichlarni
boshlang’ich qiymatlarini berish uchun quyidagi dasturga e’tibor bering:
#include <iostream.h>
using namespace std;
int main()
{ int x=10, k=9;
int *y=&x;
int *t(&k);
return 0;
}
Yuqoridagi dasturga e ’ tibor qaratsak , x va k butun sonlar qiymatlari bilan aniqlangan . * y
va * t ko ‘ rsatkichlarga boshlang ’ ich qiymat sifatida x va k ni qiymatlari berilgan .
Ko ‘ rsatkichlar ustida bajariladigan amallar
C ++ dasturlash tilida ko ‘ rsatkichlar ustida bajariladigan amallar quyidagilarni tashkil
etadi : - obyektga vositali murojat qilish amali ; - qiymat berish amali ;
-ko‘rsatgichga o‘zgarmas qiymatni qo‘shish amali; -ayirish amali; -inkrement va
decrement amali; -solishtirish amali. C++ dasturlash tilida ko‘rsatkichlar ustida faqatgina
yuqorida keltirilgan amallardan foydalanish maqsadga muvofiq bo‘ladi.
Adres olish amali
C++ dasturlash tilida biror bir o‘zgaruvchini uning sinonimi bilan almashtirib unga
murojat qilish imkoniyati mavjud. Biror bir o‘zgaruvchining boshqa o‘zgaruvchiga
adresini olish mumkin va unga murojat qilish uchun keyingi adres bo‘yicha murojat](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_13.png)
![qilinadi. C++ dasturlash tilida adres olish amalining umumiy ko‘rinishi quyidagicha
bo‘ladi:
<tur> &<nom>;
#include <iostream.h>
using namespace std;
int main()
{ int x=12;
int &a=x;
a=(a+2)/2;
cout<<”a=”<<a;
return 0;
}
Misollardan namunalar:
1-Misol: C++ dasturlash tilida ikki sonning yig’indisini hisoblash uchun fuksiya yarating
va unga murojat qilishni tasvirlang
#include <iostream.h>
int yig(int a, int b);
using namespace std;
int main()
{ int x,y,z;
cin>>x>>y;
z=yig(x,y);
cout<<z;
return 0;
}
int yig(int a, int b)
{ int t;
t=a+b;
return t;
}
2-Misol: n! faktorialni hisoblash jarayonini funksiya yordamida tasvirlash
#include <iostream.h>
using namespace std;
int main()
{ int x;
cin>>x;
int fak(int n);
cout<<fak(x);
return 0;
}
int fak(int n)
{ int p=1;
for(int i=1;i<=n;i++)
p=p*i;
return p;](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_14.png)
![}
3- Misol: Sonning natural bo‘luvchilar sonini aniqlash uchun bo’luvchi(x) funksiyasini
yarating.
#include <iostream.h>
using namespace std;
int main()
{ int x;
cin>>x;
int buluvchi(int x);
cout<<buluvchi(x);
return 0; }
int buluvchi(int n)
{ int p;
for(int i=1;i<=n;i++)
if(n%i==0) p++;
return p;
}
4-misol. x, y, x+y qiymatlar uchun eng katta umumiy bo luvchilari (EKUB) topilsin‟ .
#include <iostream>
using namespace std;
int evklid(int m,int n) //ma lumotlar qiymatlar bo yicha uzatiladi
‟ ‟
{
while (m!=n)
if (m>n) m=m-n;
else n=n-m;
return (m);
}
int main ()
{
int x,y,ekub;
cin>>x>>y;
ekub=evklid(evklid(x,y),x+y);
cout<<“EKUB="<<ekub<<"\n";}
5-Misol . N ta butun sonni so raydigan va bu sonlar tarkibidagi barcha raqamlarini
ʻ
teskari tartibda, vergul bilan ajratilgan holda matnli faylga yozadigan dastur tuzilsin
#include <iostream>
#include <fstream>
using namespace std;
ofstream f;
void kiritish(int n) //ma lumotlar
‟
qiymat bo yicha uzatiladi
‟
{ int k;
while (n!=0)
{ k=n%10;
f<<k;
n=n/10;](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_15.png)
![if (n!=0) f<<","; }
f<<endl;
}
int main ()
{ int x,i,n;
f.open("a.txt",ios::out);
cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
kiritish(x);
}
f.close();
}](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_16.png)
![5-mustaqil ish
Mavzu: Murakkab turlarni algoritmlashtirish va dasturlash. Vektorlar va massiv
ma’lumotlarini algoritmlashtirish
Reja:
1. Bir o‘lchovli massivlar
2. Rand funksiyasi
3. Ikki o‘lchovli massivlar
Massivlar holatiga ko‘ra ikki turga bo‘linadi.
- Bir o‘lchovli massivlar;
- Ikki o‘lchovli massivlar;
Bir o‘lchovli massivlar ma’lumotlarni bir satrli ko‘rinishda saqlansa, ikki o‘lchovli
massivlar esa ma’lumotlarni satrlar satri ko‘rinishida saqlaydi.
Bir o‘lchovli massivlar
Odatda massivlar zarurat, katta hajmdagi tartiblangan, lekin chekli elementlarga oid
masalalarni hal etishda yuzaga keladi. Dastur ishlatilishi davomida massivlar aniq nomga
ega bo‘lishi va uning elementlari ma’lum bir turda bo‘lishi kerak. Bir o‘lchovli massivlar
kompyuter xotirasiga quyidagi shaklda saqlanadi.
o‘zgaruvchi qiymatlar
Yuqoridagi holat bo‘yicha massivlar kompyuter xotirasiga saqlanadi, bunda massivning
ixtiyoriy elementiga murojat qilish uchun uning indeks nomeri bo‘yicha murojat qilinadi.
Bir o‘lchovli massivlarni C++ dasturlash tilida bir nechta usullarda e’lon qilish mumkin.
Bir o‘lchovli massivlarni boshlang’ich qiymatlari berilmasdan C++ dasturlash tilida
quyidagicha e’lon qilinadi.
<tur> <massiv o‘zgaruvchisi>[<element soni>];
Massivni C++ dasturlash tilida e’lon qilish uchun, albatta, elementlar soni yoki massiv
elementlarining boshlang’ich qiymatlari berilishi kerak.
C++ dasturlash tilida bir o‘lchovli massivni e’lon qilish.
#include <iostream.h>
int main()
{ int a[10]; //butun turli 10ta elementli massiv
double b[10]; //haqiqiy turli 10ta elementli massiv
return 0;
}
Massivni umumiy ko‘rinishida birinchi o‘zgaruvchi turi, massiv o‘zgaruvchisi va massiv
elementlari soni yoziladi. Massiv elementlari soni, albatta, butun sondan iborat bo‘lishi
kerak, chunki elementlar soni, albatta, butun bo’lishi kerak. Massiv elementlari soni
biror bir ifoda yoki yagona o‘zgaruvchi bo‘lishi mumkin, bitta o‘zgaruvchi orqali
massivning umumiy indekslarini ifodalash mumkin. Massiv elementlarini tashkil qilish va
massiv elementlari ustida amallar bajarishni quyidagi masala orqali qaraymiz. Massiv
elementlarini tartib nomeri doimo 0 dan boshlanadi. C++ dasturlash tilida massiv
elementlari boshlang’ich qiymatlari berilgan holatlarda e’lon qilish quyidagicha.
<tur> <massiv o‘zgaruvchisi>[<element soni>]={boshlang’ich qiymatlar};
Bunda massiv elementlari oldindan berilgan holatlarda ishlatilishi mumkin.
Rand funksiyasi a a[1]
a[2]
a[3] a[4]
a[5]](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_17.png)
![Massiv elementlarini ixtiyoriy tasodifiy sonlar bilan to‘ldirish uchun C++ dasturlash tilida
imkoniyat yaratilgan. Agar massiv elementlarini tasodifiy sonlar bilan to‘ldirish kerak
bo‘lsa, tasodifiy sonlar bilan ishlash funksiyasiga murojat qilish kerak. C++ dasturlash
tilida tasodifiy sonlarni hosil qilish rand() funksiyasining umumiy ko‘rinishi quyidagicha
bo‘ladi.
Rand();
rand() funksiyasining vazifasi biror bir o‘zgaruvchiga yoki massiv elementlariga tasodifiy
sonni o‘zlashtirish uchun xizmat qiladi. Rand() funksiyasi foydalanuvchi tomonidan dastur
tarkibiga massiv elementlarini kiritishdan ozod qiladi.
Ikki o‘lchovli massivlar
C++ dasturlash tilida ba’zi hollarda bir nechta o‘lchamlari va turi bir xil bo‘lgan bir
o‘lchovli massivlardan foydalanishga to‘g’ri keladi. Bir nechta bir o‘lchovli massivlarni
birlashtirish natijasida ikki o‘lchovli massivlarni hosil qilish mumkin. Ikki o‘lchovli
massivlarni tarkibida ma’lumotlar satrlarning satri ko‘rinishida tasvirlanadi. Ikki o‘lchovli
massivlarning tarkibi ham bir o‘lchovli massivlar kabi tartiblangan bir turga mansub
bo‘lishi kerak. Ikki o‘lchovli massivlarga matematikadagi matritsalar misol bo‘lishi
mumkin. Ikki o‘lchovli massivlar tarkibidagi elementlar xuddi matritsani elementlari kabi
tasvirlanadi.
Ta’rif: Bir turga mansub bo‘lgan yagona nom bilan saqlangan matritsa ko‘rinishdagi
tartiblangan ma’lumotlar majmuasi ikki o‘lchovli massivlar deyiladi.
Ikki o‘lchovli massivning barcha elementlari aniq turga mansub bo‘ladi va uning
elementlari bir nechta satrlar ko‘rinishda bo‘ladi. Ikki o‘lchovli massivlar quyidagi
shaklda bo‘ladi.(
a
11 a
12 … a
1 n
a
21 a
22 … a
2 n
. . .
a
n 1 a
n 2 … a
nn )
Yuqoridagi shakldan ko‘rinib turibdiki ikki o‘lchovli massiv bir o‘lchovli
massivlarning bir nechtasi yoki matritsa ko‘rinishida tasvirlanar ekan. Ikki o‘lchovli
massivlarning kompyuter xotirasiga har bir satr uchun alohida tartib nomer bilan
saqlanadi. Ikki o‘lchovli massivlarning har bir elementiga o’zining indeksi bo‘yicha
murojat qilinadi.
Ikki o‘lchovli massivlarni C++ dasturlash tilida e’lon qilish va uning umumiy
ko‘rinishi quyidagicha.
<tur> <massivO‘zgaruvchisi>[<element1 soni>][<element2 soni>];
Quyidagi ikki o‘lchovli massiv berilgan bo‘lsin.
a =
( 1 2 3
4 5 6
7 8 9 )
a(3,3) massivning elementlariga C++ dasturlash tilida murojat qilish quyidagicha
ko‘rinishda bo‘ladi. a[1][1]=1, a[2][1]=2, a[3][1]=3, a[1][2]=4, a[2][2]=5, a[3]
[2]=6, a[1][3]=7, a[2][3]=8, a[3][3]=9.
C++ dasturlash tilida ikki o‘lchovli massivlarning elementlarini boshlang’ich qiymatlarini
quyidagi tartibda berilishi mumkin.
#include <iostream.h>
int main()](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_18.png)
![{ int a[][]={{1,2,3}{4,5,6}{7,8,9}};
return 0;
}
Misollardan namunalar:
1-Misol: 10 ta elementdan tashkil topgan massiv elementlarini hosil qilib, elementlarini
ikkiga ko‘paytirib ekranga chiqaring.
#include <iostream.h>
using namespace std;
int main()
{ int a[10];
for(int i=0;i<=9;i++)
cin>>a[i];
for(int i=0;i<=9;i++)
cout<<a[i]*2<<” ”;
return 0;
}
2-Misol: Butun sonlardan iborat a[8] massiv berilgan uning juft elementlarini 2ga
ko‘paytirib toq elementlarini 3 ga ko‘paytirib ekranga chiqaring.
#include <iostream.h>
using namespace std;
int main()
{ int a[8];
for(int i=0;i<=7;i++)
cin>>a[i];
for(int i=0;i<=7;i++)
if(a[i]%2==0) {cout<<a[i]*2<<” ”;}
else cout<<a[i]*3<<” ”;
return 0; }
3-Misol: n natural son va n ta elementdan tashkil topgan massiv berilgan uning eng katta
elementini aniqlang.
#include <iostream.h>
using namespace std;
int main()
{ int a[10];
for(int i=0;i<=9;i++)
cin>>a[i];
int max=a[0];
for(int i=0;i<=9;i++)
if(a[i]>max) max=a[i];
cout<<max;
return 0; }
4-Misol: A(n) massiv elementlarini tasodifiy sonlar yordamida hosil qilib uning juft
elementlarini ikkiga ko‘paytirib ekranga chiqaring
#include <iostream.h>
using namespace std;](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_19.png)
![int main()
{ int a[10];
for(int i=0;i<=9;i++)
a[i]=rand();
for(int i=0;i<=9;i++)
if(a[i]%2==0)
cout<<a[i]*2<<” “;
return 0; }
5-Misol: A(2,3) massiv berilgan uning elementlarini ikkiga ko‘paytirib ekranga chiqaring
#include <iostream.h>
int main()
{ int a[3][2];
for(int i=0;i<=2;i++)
for(int j=0;j<=1;j++)
cin>>a[j][i];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=1;j++)
cout<<2*a[j][i]<<” ”;
cout<<”\n”; }
return 0; }](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_20.png)
![6-mustaqil ish
Mavzu: Struktura turi, Strukturalarni dasturlash va algoritmlashtirish
Reja:
1. Struktura turlari
2. Stek ma’lumotlar strukturasi
3. Navbat
C++ dasturlash tili tarkibida bir nechta turlarni birlashtirib bitta tur asosida ma’lumotlar
bazasini yaratish va ularni qayta ishlash imkoniyati keng yaratilgan. Bir nechta turlarni
birlashtirish natijasida strukturalar hosil qilib C++ dasturlash tili tarkibida tashkilotlarga
tegishli bo‘lgan bir nechta masalalarni hal etish imkoniyati mavjud.
Ta’rif: C++ dasturlash tilida bir yoki bir nechta turlarni jamlanmasini birlashtirish
struktura deb nomlanadi.
Strukturalarni ba’zi hollarda yozuvlar ham deb ataladi, strukturalar tarkibidagi turlarning
har biri maydon deb nomlanadi.
Ta’rif: Ob’yektning bitta xususiyatini uzida saqlaydigan parameter maydon deb
nomlanadi.
Talaba haqida ma’lumotlar strukturasi hosil qilinishda quyidagi maydonlar bo‘lishi
mumkin: Talabani familyasi, ismi, otasining ismi, tug’ilgan vaqti, telefoni, manzili va
hakoza. Strukturalar maydonlardan tashkil topgan ekan, struktura tarkibidagi har bir
maydon strukturani bitta parametrini o‘zida saqlaydi. Struktura maydoni uchun xotira
hajmi , mayon uzunligiga teng bo‘ladi. Struktura maydoni qiymatlari ifodalarda ishlatilishi
mumkin. C++ dasturlash tilida strukturalarni e’lon qilishda struct xizmatchi so‘zidan
foydalaniladi. Struktura e’lon qilingandan so‘ng dastur tarkibida o‘zgaruvchilarni struktura
nomi bilan e’lon qilinadi.
C++ dasturlash tilida strukturalarni tasvirlashning umumiy ko‘rinishi quyidagicha
ko‘rinishda bo‘ladi:
struct <struktura nomi>
{ <tur1> <maydon 1>;
<tur2> <maydon 2>;
_ _ _ _ _ _ _
<tur n> <maydon n>;
};
Strukturalarni tasvirlashda struct xizmatchi so‘zidan keyin struktura nomi va fegurali
qavsda uning maydonlari kiritilishi shart. Structura nomi masala mohiyatiga qarab
tanlansa, maqsadga muvofiq. Masalan, talabalar haqida ma’lumotlar bazasida struktura
nomini talaba yoki supermarket mahsulotlari narxlari bazasida esa narx deb nomlash
mumkin. Strukturalar tarkibidagi maydonlarni e’lon qilish xuddi oddiy o‘zgaruvchilarni
e’lon qilishdek bajariladi va oxiri blok yopilishidan so‘ng, albatta, nuqtali vergul qo‘yilishi
shart.
Yuqoridagi masalada talaba haqida ma’lumotlar strukturasini hosil qilishda struktura
nomiga talaba deb nomlandi va uning maydonlari familyasi(fam), ismi(ism), telefoni(tel),
reytingi(reyting), tug’ilgan yili(tugy) ko’rinishlarida tasvirlandi. Maydonlarni e’lon
qilishda dastur tarkibida qanday maqsadlarda foydalanishi e’tiborga olinishi kerak. Agar
dastur tarkibida maydonlar ustida hisob ishlari olib borilmasa, uning turini char yoki string](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_21.png)
![turi ko‘rinishida e’lon qi Stek – Stack inglizchadan uyum, g aram, dasta, bog lam deganʻ ʻ
ma’noni anglatadi.
Stek - bu LIFO (last in – first out; oxirgi kelgan – birinchi ketadi) prinsipi bo yicha
ʻ
ishlaydigan ma’lumotlar strukturasi.
Stekda massivdagi kabi indekslar mavjud emas, demak ma’lum bir elementga murojaat
qila olmaysiz. Buning sababi, stek bog langan ro yxatlar asosida tuzilgan. Bu shuni
ʻ ʻ
anglatadiki, har bir element (oxirgisidan tashqari qolgan elementlar NULL-ga ishora
qiladi, oddiy so zlar bilan aytganda, hech narsaga ishora qilmasa NULL bo ladi) keyingi
ʻ ʻ
elementga ko rsatgichga ega. Ammo ko rsatgich bo lmagan element mavjud - birinchisi
ʻ ʻ ʻ
(yoki uni bosh element deb ham atashadi).
Stek ma’lumotlar strukturasi
Shu o rinda savol paydo bo lishi mumkin? Nima uchun massivlarni ishlatish mumkin
ʻ ʻ
bo lganda stekni ishlatamiz. Sababi stek to plamining asosiy kuchi elementlarni qo shish
ʻ ʻ ʻ
va olib tashlashdan iborat ekanligida. Ushbu amallar doimiy vaqt ichida amalga oshiriladi
(bu yaxshi plyus). Ba’zi dasturchilar massivda stek qilishadi. Stekdan foydalanishning bu
usuli haqida biroz keyinroq gaplashamiz.
C ++ tilida stekni realizatsiya qilish. Dastur boshida stek shablonidan foydalanish uchun
< stack > kutubxonasini yoqishimiz kerak.
Stek yaratish uchun biz quyidagi sxema bilan ishlashimiz kerak:
stack <ma’lumot_turi> <nom>;
Yangi satrda stack kalit so zini yozishimiz kerak.
ʻ
<ma’lumotlar turi> - bu yerda stekda saqlanadigan ma’lumotlar turini yozishimiz kerak.
<nom> - bu stek nomi.
Navbat
Navbat. Navbat - bu FIFO (First In - First Out - "birinchi kelgan – birinchi ketadi")
prinsipi bo yicha qurilgan ma’lumotlar strukturasi.
ʻ
Navbatda, agar siz avval kiritilgan elementni qo shsangiz, u birinchi bo lib chiqadi. Agar 4
ʻ ʻ
ta element qo shsangiz, birinchi qo shilgan element birinchi bo lib chiqadi.
ʻ ʻ ʻ
Navbat ma’lumotlar strukturasi
Rasmda 7 ta raqam mavjud: 2, 4, 7, 1, 4, 9, 10. Agar ularni ajratib olishimiz kerak bo lsa,
ʻ
biz ularni rasmdagi kabi tartibda chiqaramiz!
Masalan, 4-raqamni ajratib olish uchun avval 2-raqamga, so ngra 4-raqamga xizmat
ʻ
ko rsatishimiz kerak.
ʻ
Stekda peek() funksiyasi mavjud bo lsa-da (bu elementga indeks bo yicha kirishga imkon
ʻ ʻ
beradi), navbat shablonidagi ma’lum bir elementga murojaat qilish mumkin emas.
Agar siz navbatning barcha elementlariga kirishingiz kerak bo lsa, unda siz navbatni
ʻ
massiv orqali amalga oshirishingiz mumkin](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_22.png)
![Misollardan namunalar:
1-Misol: Talabalar(familyasi, ismi, telefoni, reytingi, tug’ilgan yili) haqida ma’lumotlarga
asosan c++ dasturlash tilida struktura hosil qiling.
#include <iostream.h>
using namespace std;
struct talaba
{
char[20] fam; //familyani saqlovchi maydon
char[20] ism; //ismni saqlovchi maydon
char[20] tel; //telefonni saqlovchi maydon
int reyting; //reyting balini saqlovchi maydon
int tugy; //tug’ilgan vaqtini saqlovchi maydon
};
int main()
{
return 0;
}
2-Misol:
#include <iostream>
using namespace std;
struct MT
{ char Univernomi[10];
int Tbsoni;
int Kafedrasoni;
};
int main(void) {
struct MT p;
cout<<"Universitet nomini kiriting";
cin.get(p.Univernomi,10);
cout<<"Talabalar soni";
cin>>p.Tbsoni;
p.Kafedrasoni = 30;
cout << "Talabalar soni: " << p.Tbsoni << endl;
cout << "Kafedralar soni: " << p.Kafedrasoni << endl;
cout<<"Universitet nomi:"<<p.Univernomi;
return 0;}
3-Misol:
#include <iostream>
using namespace std;
struct Person
{
char name[50];
int age;
float salary;
};](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_23.png)
![int main()
{
Person p1;
cout << "Enter Full name: ";
cin.get(p1.name, 50);
cout << "Enter age: ";
cin >> p1.age;
cout << "Enter salary: ";
cin >> p1.salary;
cout << "\nDisplaying Information." << endl;
cout << "Name: " << p1.name << endl;
cout <<"Age: " << p1.age << endl;
cout << "Salary: " << p1.salary;
return 0;
}
4-Misol:
#include <iostream>
using namespace std;
struct Person
{
char fakultet[50];
char yonalish[50];
int guruh;
int ID;
};
int main()
{
Person p1;
cout << "Fakultetingiz: ";
cin.get(p1.fakultet, 50);
cout << "Yo'nalishingiz: ";
cin >> p1.yonalish;
cout << "Guruhingiz: ";
cin >> p1.guruh;
cout<<"Id ingiz:";
cin>> p1.ID;
cout << "\nDisplaying Information." << endl;
cout << "fakultet: " << p1.fakultet << endl;
cout <<"yunalish: " << p1.yonalish<< endl;
cout << "guruh: " << p1.guruh;
cout<<"Id:"<<p1.ID;
return 0;
}
5-Misol: Stekning juft o’rinda turgan elementlari o’chirilsin.
*- coding: utf-8 -*-](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_24.png)
!["""
Created on Sat May 14 10:32:29 2022
@author: admin
"""
class Steck:
"""Steck degan malimot turi"""
def init(self):
self.steck=[]
def Push(self,data):
"""Ruyhatga elimentlar qushish"""
# self.data=data
self.steck.append(data)
return f"Malimot qushildi"
def isEmpty(self):
"""Element bush emasligini tekshirish"""
return len(self.steck)==0
def Pop(self):
"""Ruyhatdan eliment sug'irib olish"""
if self.isEmpty():
return f"Malimot bosh"
else:
self.steck.pop()
def Peek(self):
"""Eng yuqoridagi qiymat elimentini kurish"""
if self.isEmpty():
return f"Tuplam ichida eliment yuq"
else:
return self.steck[-1]
def malimot(self):
"""toq urinda turgan malimotlardi chiqarish"""
return self.steck[1:10:2]
# def uchirish(self):
# """Juft urinda turgan malimotlardi uchirish."""
# # if m%2==0:
# for n in self.steck:
# n%2==0
# return self.steck.pop()
steck=Steck()](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_25.png)
![print(steck.Push(2))
print(steck.Push(23))
print(steck.Push(42))
print(steck.Peek())
print(steck.malimot())
7-mustaqil ish
Mavzu: Tartiblash va saralash masalalarini algoritmlashtirish. Ma’lumotlarni
tartibga solish turlari. Ma’lumotlar tuzilmasini saralash usullari.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_26.png)
![Reja:
1. Qo’yish tartiblash usuli (Insertion Sort)
2. Sheyker tartiblash usuli
3. Shell tartiblash usuli
Tartiblash – bu berilgan obyektlar to plamini muayyan tartibda qayta tartibga solishʻ
jarayoni. Saralashning maqsadi elementlarni topishni osonlashtirishdir.
Saralash algoritmi – bu ro yxatdagi elementlarni saralash algoritmi. Agar ro yxat
ʻ ʻ
elementida bir nechta maydon bo lsa, saralash amalga oshiriladigan maydon
ʻ saralash
kaliti deb ataladi. Amalda raqam ko pincha kalit sifatida ishlatiladi va ba’zi ma’lumotlar
ʻ
algoritm ishlashiga hech qanday ta’sir ko rsatmaydigan qolgan maydonlarda saqlanadi.
ʻ
1. Qo’yish tartiblash usuli (Insertion Sort)
Qo’yish tartiblash usuli (Insertion Sort) – bu sodda tartiblash algoritmi. Algo-ritmning har
bir qadamida massiv elementlaridan biri olinadi, qo’yish uchun joyi aniqlanadi va
qo’yiladi. Ta'kidlash kerakki, 1 ta elementdan iborat massiv tartiblangan hisoblanadi.
Algoritmning so’zli tavsifi murakkab ifodalanadi, lekin amalga oshirish juda ham sodda.
Har biri kishi, faoliyati davomida saralash algoritmidan foydalanadi. Masalan,
kupyuralarni tartiblashda, 100 so’mlik kupyurani olib, 10, 50 va 500 so’mlik kupyuralar
ketma-ket kelgan bo’lsin. Bunda faqat 50 dan 500 so’mlik kupyurani orasiga 100 so’mlik
kupyurani qo’yamiz. Amalga oshirish .Amalga oshirishni davom ettirishdan oldin, kirish
ma'lumot-larining formatini aniqlaymiz - masalan, bu butun (int) qiymatlar massivi
bo'lsin. Massiv elementlarini nomerlash 0 dan boshlanadi va n-1 bilan tugaydi. Algoritmni
C++ tilida amalga oshirish misolida qarab chiqamiz.
Algoritmning asosiy sikl 0-elementdan emas, balki 1-elementdan boshlanadi, chunki 1-
elementgacha bo'lgan element tartiblangan ketma-ketlik bo'ladi (bitta elementdan iborat
massiv tartiblangan hisoblanadi) va bu elementga nisbatan 0 nomerli bilan biz boshqasini
kiritamiz. Aslida kod:
for(int i=1;i<n;i++)
for(int j=i;j>0 && x[j-1]>x[j];j--) // toki j>0 va elementlarda j-1 > j
swap(x[j-1],x[j]); // massivning j va j-1 elementlari almashtiriladi
Tartiblashni amalga oshirish juda oddiy, faqat 3 qatordan iborat. swap funksiyasi x[j-1] va
x[j] elementlarini almashtiradi. Ichma-ich sikl elementni qo’yish uchun joyni aniqlaydi.
Algoritm tahlili
Qo’yish tartiblash usuli n2 murakkablik tartibiga ega, taqqoslashlar soni n*(n-1)/2
formulasi bo'yicha hisoblanadi. Bunga quyidagi kod bilan ishonch xosil qilish mumkin:
void Sort(int* arr,int n){
int counter=0;
for(int i=1;i<n;i++){
for(int j=i; j>0 && arr[j-1]>arr[j];j--){
counter++;
int tmp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=tmp;
}
}
cout<<counter<<endl;
}](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_27.png)
![Samaradorlik
Agar massivning qismi tartiblangan va massiv elementlar soni ko‘p bo‘lmasa, ushbu
tartiblash eng samarali hisoblanadi. Agar elementlar 10 dan ko’p bo'lmasa, ushbu algoritm
eng yaxshi hisoblanadi.
2. Sheyker tartiblash usuli
Pufakchali tartiblash usuli ma'lum darajada yaxshilanishi va uning vaqt xarak-teristikasini
yaxshilashi mumkin. Masalan, tartiblashning bitta o'ziga xos xususi-yatini ko'rish
mumkin: massiv oxiridagi o’z o’rnida joylashmagan element bir o'tishda o'z joyiga
joylashadi va massiv boshida joylashgan element esa o'z joyiga joylashishi juda sekin
amalga oshiriladi. Barcha qarab chiqishlarni bir yo'nalishda olib borish shart emas. Buning
o'rniga, har bir keyingi qarab chiqishni teskari yo'nalishda amalga oshirilishi va
tartiblanmagan qismning quyi va yuqori chegaralarini belgilash mumkin, ya’ni qarab
chiqishning massivning oxirigacha emas, balki oldingi qarab chiqilgandagi oxirgi
almashtirishgacha tartiblash maqsadga muvofiq bo’ladi. Bunday holda, o'z joyidan uzoqda
bo'lgan elementlar tezda tegishli joyga o'tadi. Quyida massivlarning tartiblashning Sheyker
tartiblash usuli deb nomlangan pufakchali tartiblashning takomillashtirilgan versiyasi
keltirilgan:
left = 1 // tartiblanmagan qismning chap chegarasi
right = N // tartiblanmagan qismning o’ng chegarasi
tartib = false // true, agar massiv tartiblangan bo’lsa
toki emas tartib
tartib = true
i = left
//Massivning boshidan oxirigacha o’tish:
toki i < right
agar A[i] > A[i + 1] u holda
almashtir (А, i, i+1)
tartib = false
hal bo’ldi // (agar)
i = i + 1
sikl oxiri
// >=1 element o’ngdan o’zining joyiga qo’yildi
right = right – 1
agar emas tartib u holda
tartib = true
i = right
toki i > left
agar A[i] < A[i – 1] u holda
almashtir (A, i, i–1)
tartib = false
hal bo’ldi
i = i – 1
sikl oxiri
hal bo’ldi // (agar)
// >= 1 element chapdan o’zining joyiga qo’yildi
left = left + 1](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_28.png)
![sikl oxiri // emas tartib
Dasturi :
void shaker_sort (struct KeyData A [], int N)
{
int left = 0, right = N-1;
int sorted = 0;
while (!sorted && left < right) {
int i;
sorted = 1;
for (i = left; i < right; ++i) {
if (A[i+1] < A[i]) {
struct KeyData x = A[i+1];
A[i+1] = A[i];
A[i] = x;
sorted = 0;
}
}
right -= 1;
if (!sorted) for (i = left+1; i<=right; i++) {
if (A[i-1] > A[i]) {
struct KeyData x = A [i-1];
A[i-1] = A[i];
A[i] = x;
}
}
left += 1;
} // while
} // shaker sort
3. Shell tartiblash usuli
Bu tartiblash usuli 1959 yilda D. Shell tomonidan taklif qilgan. U xotiradan minimal
foydalanadi va tartiblashda yuqori tezligini ko'rsatadi. Shell usuli qo'-shish usuliga
o'xshash elementlarni taqqoslash va almashtirishlardan foydala-nadi, ammo
taqqoslanadigan elementlarning tartibi butunlay boshqacha tar-tibda bo’ladi. Shell
tartiblash usulining g’oyasi bir-biridan ma'lum step qadam masofada joylashgan
elementlarni tartiblashdan iboratdir. Keyin tartiblash step kichik qiymatlarida takrorlanadi
va Shell tartiblash jarayoni step = 1 bo’lganga tugaydi Tartiblash step qadamini tanlash
masalasi muhokamasi davom etmoqda. Shell quyidagi ketma-ketlikni taklif qildi: N/2,
N/4, N/8 ..., bu erda N - massivdagi tartiblanadigan elementlar soni. Shell tartiblash N
uzunlikdagi ketma-ketlikni tartiblash uchun log2N ga yaqin o'tishni talab qiladi
Misollardan namunalar
1-Misol: Butun sonlardan iborat navbatning juft elementlarini o’chirish dasturini
keltiramiz.
#include <iostream>
using namespace std;](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_29.png)
![int a[10],R=0,n;//bu yerda n navbatga kiritilishi kerak bo'lgan elementlar soni.
int kiritish(int s){
a[R]=s; R++;
}
int chiqarish(){ int
t=a[0];
for(int i=0;i<R-1;i++)
a[i]=a[i+1];
R--;
return t;
}
bool isEmpty(){
if(R==0) return true; else return false;
}
bool isFull(){
if(R>=10)return true;else return false;
}
int print(){ int i;
while(i<R){
int k=chiqarish();i++; cout<<k<<" ";
kiritish(k);}
}
int main(){ int n,s;
cout<<"n=";cin>>n; for(int
i=0;i<n;i++){ if(!isFull()){cin>>s;
kiritish(s);}
else{cout<<"navbat to'ldi"; n=i;break;}
}
cout<<"\nnavbat elementlari: "; print();
for(int i=0;i<n;i++){ s=chiqarish(); if(s%2!
=0)kiritish(s);](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_30.png)
![}
cout<<"\nnatijaviy navbat elementlari: "; print();
system("PAUSE");
}
Dasturning bajarilishi natijasi:
n=5 6
7
9
8
11
navbat elementlari: 6 7 9 8 11
natijaviy navbat elementlari: 7 9 11
2-Misol:
Dastur kodi
#include <iostream> using
namespace std;
int a[10],R=0,n;//bu yerda n stekka kiritilishi kerak bo'lgan elementlar soni. int
kiritish(int s){
a[R]=s; R++;
}
int chiqarish(){](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_31.png)
![R--;
return a[R];
}
bool isEmpty(){ if(R==0)
return true;
else return false;
}
bool isFull(){
if(R>=10) return true;else return false;
}
int print(){
int i=0,c[n]; while(!isEmpty()){
c[i]=chiqarish(); cout<<c[i]<<" ";i++;}
for(int j=i-1;j>=0;j--) kiritish(c[j]);
}
int main(){ int n,s;
cout<<"n=";cin>>n; for(int
i=0;i<n;i++){
if(!isFull()){ cin>>s;
kiritish(s);}
else{cout<<"stek to'ldi"; n=i;break;}
}
cout<<"\nstek elementlari: "; print();
int b[n],k=0;
for(int i=0;i<n;i++){ s=chiqarish();
if(s%2!=0) b[k++]=s;
}
for(int i=k-1;i>=0;i--) kiritish(b[i]);
cout<<"\nnatijaviy stek elementlari: "; print();
system("PAUSE");](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_32.png)
![}
Dasturning bajarilishi natijasi:
n =5
6
7
9
8
11
stek elementlari: 11 8 9 7 6
natijaviy stek elementlari: 11 9 7
3-Misol:
Dastur kodi
#include <cstdlib>
#include <iostream> using namespace std; int a[10],n,R=0; bool isEmpty(){
if(R==0) return true; else return false;
}
bool isFull(){
if(R>=10) return true; else return false;
}
int kirit_left(int s){
if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;} for(int i=R;i>0;i--)
a[i]=a[i-1];
a[0]=s;R++;
cout<<"\nnatijaviy stek elementlari: "; print();
system("PAUSE");
}
Dasturning bajarilishi natijasi:
n =5
6
7
9
8
11
stek elementlari: 11 8 9 7 6
natijaviy stek elementlari: 11 9 7](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_33.png)
![3-Misol:
Dastur kodi
#include <cstdlib>
#include <iostream> using
namespace std; int
a[10],n,R=0; bool
isEmpty(){
if(R==0) return true; else return false;}
bool isFull(){
if(R>=10) return true; else return false;
}
int kirit_left(int s){
if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;} for(int
i=R;i>0;i--)
a[i]=a[i-1];
a[0]=s;R++;
}
int olish_left(){
if(isEmpty()){cout<<"\ndek bo'sh";return EXIT_SUCCESS;} int t=a[0];
for(int i=0;i<R-1;i++) a[i]=a[i+1];
R--;
return t;
}
int kirit_right(int s){
if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;} a[R]=s;R++;
}
int olish_right(){
if(isEmpty()){cout<<"\ndek bo'sh";return EXIT_SUCCESS;} R--;](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_34.png)
![return a[R];
}
int print(){
cout<<endl<<"dek ele-tlari=";
for(int i=0;i<R;i++)cout<<a[i]<<" "; cout<<endl;
}
int main(int argc, char *argv[])
{ int n,s;cout<<"n="; cin>>n;
for(int i=0;i<n;i++){
if(!isFull()){ cout<<"kirit=";cin>>s;
if(i>=n/2) kirit_right(s); else
kirit_left(s);}
else {cout<<"dek to'ldi\n";break;}
}
print();
int b[n/2],k=0,c[n/2],p=0;
while(!isEmpty()){
int q=olish_left(); if(q%2==0)
b[k++]=q; if(isEmpty()) break;
int p=olish_right(); if(p%2==0) b[k+
+]=p;
}
int i=0; while(i<k){
kirit_right(b[i]); i++;
}
print(); system("PAUSE"); return
EXIT_SUCCESS;
}
Dastur natijasi](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_35.png)
![n=8](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_36.png)
![8-mustaqil ish
Mavzu: Qidiruv algoritmlari. Axborot izlashning asosiy tamoyillari. K е tma-k е t izlash.
Izlashning t е zlashtiririlgan usullari.
Reja:
1. Axborot izlashning asosiy tamoyillari
2. Ketma-ket izlash
3. Ikkilangan daraxt bo’yicha izlash
1.Axborot izlashning asosiy tamoyillari
Kompyuter yordamida axborotga ishlov berishning istalgan jarayonida har qanday
hisoblash ishlarini bajarishda bir necha marta mashina xotirasidagi zarur ma’lumotlarni
izlash masalasini hal qilishga to‘g‘ri keladi. Bunda, odatda, ma’lumotlarning imkon qadar tez
topilishi talab etiladi. Izlash ishlari AAT foydalanuvchilari yoki ilovalardan tushadigan
so‘rovlarga javoban olib boriladi. Birinchi holda so‘rov ochiq xolda shakllantiriladi va uni
amalga oshirish uchun izlash algoritmi ishlab chiqiladi va tegishli dasturlar yoziladi.
Ilovalardan tushadigan so‘rovlar ochiq shaklda shakllantirilmaydi, lekin har qanday dasturni
bajarishda izlash operatsiyalari amalga oshiriladi. Masalan, o‘zgaruvchiga uning nomi bilan
har qanday qilingan murojaatlarda operatsion tizim bu o‘zgaruvchining joriy qiymati
saqlanayotgan xotira uyasini izlashga kirishadi. Axborot massividan aynan izlanayotgan
axborot joy olgan yozuvni izlab topish uchun uni qandaydir yo‘l bilan «tanish» zarur. Buning
ustiga ushbu yozuv so‘rovni qoniqtiradimi-yo‘qmi, buni aniqlash kerak. Agar berish
mezonlari bilan belgilanadigan shartlar bajarilsa, yozuv so‘rovni qoniqtiradi deb xisoblanadi.
Axborot izlashning asosiy vazifasi - yozuv ichidagi ma’lumotlarning belgilangan berish
mezonlariga mosligi to‘g‘risidagi masalani xal qilishdan iborat. AAT ga tushadigan so‘rov
muayyan tarzda shakllantiriladi. Bunda izlash argumenti shakllantiriladi. So‘rovning turiga
ko‘ra izlash argumenti turli shakl va murakkablik darajasiga ega bo‘lishi mumkin. Eng oddiy
xolda, ya’ni muayyan belgilarga ega bo‘lgan ob’ekt to‘g‘risidagi yozuvni topish kerak
bo‘lganida shu belgining o‘zi izlash argumenti bo‘ladi. Bunday izlash, odatda, bir aspektli,
ya’ni bitta belgisi bo‘yicha izlash deyiladi. Izlash argumenti ob’ektning muayyan, shu
jumladan asosiy bo‘lmagan belgilari ro‘yxatidan iborat bo‘lishi mumkin, u xolda ko‘p
aspektli deb ataladi. Izlash argumenti belgilar va mantiqiy operatsiyalar (kon’yunksiya,
diz’yunksiya, inversiya va boshqalar) dan iborat bo‘lgan bul algebrasi formulasi yoki ko‘plik
nazariyasi, yoki bu belgilar ustidagi nazariyko‘plik operatsiyalari (birlashtirish, kesib o‘tish
va xokazo) dan iborat bo‘lishi mumkin. Bunday agrument bo‘yicha izlashda yozuv maydoni
qiymatlari ustida tegishli operatsiyalar bajariladi. Bu izlash bosqichining o‘zidayoq
yozuvning axborot mazmunini muayyan darajada baxolash imkonini beradi. Izlashning
bunday turidan ilmiytexnika yoki boshqa matnli axborotga ishlov beradigan
avtomatlashtirilgan tizimlarda foydalaniladi. Bunday tizimlarda izlashda u yoki bu belgilari
bo‘yicha topilgan xujjatning mazmunini va uning so‘rov mazmuniga moslik darajasini
baxolash muximdir. Har qanday xolda ham izlash argumentining istalgan shaklida axborot
izlash jarayoni formal jarayon bo‘lib, muayyan simvollarni qiyoslash yoki ular ustida
qandaydir operatsiyalarni bajarishdan iboratdir. Bu jarayon izlanayotgan axborot tabiatiga
bog‘liq bo‘lmaydi. Izlash jarayonining formalligi izlash uchun xam kompyuterdan, xam turli](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_37.png)
![mexanizatsiyalashgan tizimlardan, xatto dastaki qurilmalardan xam foydalanish imkoniyatini
beradi. Izlash sifati, uning samaradorligi tizimni ishlab chiqish bosqichida aniqlanadi va
so‘rovning mazmuni va ma’nosi izlash argumentida, xujjatning mazmuni esa yozuv maydoni
mazmunida qanchalik aniq va to‘liq aks ettirilganiga bog‘liq bo‘ladi.
Axborot izlashning quyidagi turlari mavjud: Mosligi bo‘yicha izlash. Izlash argumenti bir
yoki bir nechta belgilar (yozuv maydonlari) nomi va ularning qiymatlaridan iborat bo‘ladi.
Izlash jarayonida axborot massividan nomlangan maydonlarning qiymatlari ko‘rsatilgan
yozuvlar ajratiladi. Bu xolda bevosita mos tushish ma’lumotni chiqarib berish mezoni
xisoblanadi. Bunday izlash natijasida muayyan belgilarning aniq qiymatlariga ega bo‘lgan
ob’ektlar to‘g‘risida ma’lumotlar olinadi. Interval bo‘yicha izlash. Izlash argumenti bir yoki
bir necha belgilar nomidan va bu belgilar qiymatlarining o‘zgarish chegarasidan iborat
bo‘ladi. Izlash jarayonida axborot massividan tegishli maydonlarining qiymati belgilangan
chegaralarda yotadigan ko‘plab yozuvlar ajratib olinadi. Bu erda belgilangan intervalga
tegishli ma’lumotlarni chiqarib berish mezoni xisoblanadi. Izlash natijasida foydalanuvchini
qiziqtirgan belgilar qiymati ko‘rsatilgan diapazon chegarasidan chiqmaydigan ob’ektlar
to‘g‘risidagi ma’lumotlar olinadi. Ifodalar bo‘yicha izlash. Izlash argumenti arifmetik yoki
nazariy-ko‘plik ifodasi yoki bul algebrasi formulasidan iborat bo‘ladi. Belgilarning nomi
operanda xisoblanadi. Izlash jarayonida massivning barcha yozuvlari tegishli maydonlaridagi
mavjud narsalar ustida zarur operatsiyalar bajariladi: yoki izlash argumenti bilan belgilangan
ifodaning qiymati hisoblab chiqiladi, yoki nazariy-ko‘plik operatsiyalari bajariladi, yoki
ifodaning xaqiqiyligi aniqlanadi. Bunday izlashda foydalaniladigan chiqarib berish mezonlari
mantiqiy mezonlar deb ataladi. Ancha murakkab bo‘lgan so‘rovlar, odatda, shunday shaklga
keltiriladiki, bunda yuqorida sanab o‘tilgan izlash turlaridan biri bilan ularni amalga oshirish
mumkin bo‘lsin. Axborot izlash protsedurasi ko‘pincha izlash mantiqi va izlash strategiyasi
nuqtai nazaridan qaraladi. Izlash mantiqi izlash topshiriqlarining so‘zlar bilan berilgan
mazmuniy bayonini belgilab beradi, izlash argumenti turini aniqlaydi, topilgan axborotning
so‘rovga mosligini baxolash mezonlarini belgilaydi. Izlash mantiqi kompyuterning xotira
qurilmasida axborot massivlarini tashkil etishning o‘ziga xos xususiyatlari, kompyuterning
turi va konfiguratsiyasi, hisoblash tizimining matematik ta’minoti kabilarga bog‘liq
bo‘lmaydi. Aynan izlash mantiqi izlash samaradorligi - to‘liqligi va aniqligini baholashni
belgilaydi. Izlash strategiyasi — bu izlash mantiqini muayyan tizim sharoitida amalga
oshirishdir. Izlash strategiyasini ishlab chiqishda saqlanayotgan axborot harakteri, axborot
massivlari hajmi va XQ (xotira qurilmasi) turi baholanadi; kompyuter xotirasidan
ma’lumotlarni izlashning ma’lum bo‘lgan bitta usuli tanlanadi yoki o‘ziga xos usuli ishlab
chiqiladi; so‘rovlar va javoblar shakllarini xisobga olgan xolda izlash algoritmi belgilanadi.
Izlash strategiyasini ishlab chiqishda axborot massivlarini tashkil etish usuli, ya’ni
ma’lumotlarni tashkil etish uchun foydalanilgan strukturalar turi albatta xisobga olinadi.
Axborotni izlash tezligi strategik masalalarni savodli va oqilona hal qilishga bog‘liq bo‘ladi.
Ushbu mavzuda ko‘rib chiqiladigan barcha material dasturiy izlashga taalluqli bo‘lib,
muayyan algoritmlar bo‘yicha tuzilgan dasturlar yordamida amalga oshiriladi. Uning
davomiyligi axborot massivi, ma’lumotlar tuzilishi, foydalanish usuli, algoritmlar va
dasturlar sifatiga bog‘liq bo‘ladi. Assotsiativ xotirlash qurilmalariga ega bo‘lgan](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_38.png)
![kompyuterlarda izlash operatsiyalari apparat vositalari bilan amalga oshiriladi. Apparat
(sxema) vositasida izlash tezligi bo‘yicha har qanday dasturiy usuldan ustun turadi, buning
ustiga apparat vositasida izlash vaqti yuqorida sanab o‘tilgan omillarning birortasiga xam
bog‘liq bo‘lmaydi. Undan foydalanish xozirgi vaqtda ishlatilayotgan kompyuterlarda katta
xajmdagi assotsiativ xotira qurilmalari yo‘qligi sababli cheklangandir. Katta assotsiativ
xotiraga ega bo‘lgan kompyuterlarni ishlab chiqish va joriy etish ma’lumotlarning jismoniy
tuzilishini jiddiy o‘zgartirishlarga va axborotga avtomatlashgan ishlov berish tizimlari ish
unumining ancha ortishiga olib keladi.
2. Ketma-ket izlash
Izlashning ketma-ket usulini ketma-ket saralash usuli deb xam atashadi. Bu eng universal,
eng oddiy va eng uzok davom etadigan izlash usulidir. Ketma-ket izlashdan axborot
massivlarining har qanday tashkil etilishida, ma’lum otlarning turli tuzilishida, turli izlash
argumentlarida foydalanish mumkin. Izlash jarayonida massivning har bir yozuviga ketma-
ket murojaat etiladi va bunda ushbu yozuv chiqarib berish mezonlarini qoniqtirishi
aniqlanadi. Mosligi bo‘yicha bir aspektli izlashda tartibga solinmagan axborot massivida
yozuvlar kaliti xamda izlash argumentlarini solishtirish massivning barcha N yozuvlari
ko‘rib chiqilmaguncha davom ettiriladi. Izlanayotgan kalitli yozuvlar foydalanuvchiga
taqdim etiladi yoki yana qayta ishlash uchun amaliy dasturlarga uzatiladi.
2. Ketma-ket izlash Masalan, yozuvlar kaliti qiymatlari ortib borishi bo‘yicha tartibga
solingan massivda joriy yozuv kalitining qiymati izlash argumenti qiymatidan ortib ketishi
bilan izlashni darhol to‘xtatish mumkin. Interval bo‘yicha bir aspektli izlashda xam tartibga
solingan massivda izlashni barcha massiv ko‘rib chiqilgunga qadar to‘xtatish mumkin. N
yozuvdan iborat massivda tadrijiy izlash uchun o‘rtacha (N + 1)/2 solishtirish (suratdagi bir
N juft bo‘lmaganda paydo bo‘ladi) talab etiladi. Eng yomon xolda, izlanayotgan yozuv
massivning eng oxirida bo‘lsa yoki umuman u erda bo‘lmasa, N solishtirish talab etiladi.
Ketma-ket izlash — tartibga solinmagan strukturalanmagan massivlarda ma’lumotlarni
izlashning yagona variantidir. Lekin, shuni yodda tutish kerakki, axborot massivlari xajmi
juda katta bo‘lgan xollarda izlash shunchalik uzoq davom etadiki, u butunlay foydasiz xam
bo‘lib qolishi mumkin. Aniqroq aytganda, bunday xolda izlash usuli emas, axborot massivini
tashkil etish foydasiz bo‘ladi. Katta xajmdagi axborot yoki tartibga solingan, yoki, eng
yaxshisi, strukturalangan bo‘lishi zarur. Tartibga solinmagan massivlarda axborot izlash
jarayoni birmuncha tezlashtirilishi mumkin. Har qanday izlash algoritmi massiv tugashini
tekshirish blokiga ega bo‘ladi. Odatda, har safar navbatdagi yozuvga murojaat qilishdan
oldin bunday tekshirish amalga oshiriladi. Lekin massiv tugashini har bir solishtirish vaqtida
tekshirib o‘tirmaslik mumkin. Buning uchun massiv oxiriga kaliti izlanayotgan axborot
kalitiga teng bo‘lgan soxta (N + 1) yozuvi kiritiladi. Bunda massivning oxiri faqat izlash
argumenti joriy yozuv kaliti qiymati bilan mos kelgan xolda tekshiriladi. Agar bu yozuv
massiv ichida bo‘lsa, izlash muvaffaqiyatli tugallanadi va zarur yozuv topilgan xisoblanadi.
Agar bu yozuv (N + 1) bo‘lsa, demak, izlash muvaffaqiyatsiz bo‘ladi, ya’ni kerakli yozuv
massivda yo‘q bo‘ladi. Agar massiv uchun umumiy ma’lumotnoma tashkil etilgan bo‘lsa,
tartibga solinmagan massivda tadrijiy izlash ancha kam vaqt talab etadi. Ma’lumotnoma
xajmi asosiy massiv hajmidan kam bo‘lganligi uchun unda axborot izlash tezrok bo‘ladi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_39.png)
![Ketma-ket tartibga solingan axborot massivlarida izlashni ancha tezlashtirish mumkin.
Izlashning tezlashtirilgan usullariga ikkilangan va blokli izlash usullarini kiritish mumkin.
Ikkilangan izlash, boshqacha aytganda, binar yoki dixotomik izlash eng tezkor usullardan
biridir. Yozuvlar kalitining qiymati oshib borishi bo‘yicha tartibga solingan massiv o‘rtasida
joylashgan yozuvga birinchi murojaat qilinadi (1-rasm). Yozuv kaliti (K) izlash argumenti
(A) bilan solishtirilgandan so‘ng bunday keyin massivning qaysi qismiga murojaat qilish
kerakligi aniqlanadi. Agar yozuv kaliti qiymati izlash argumenti qiymatidan katta bo‘lsa,
keyingi murojaat massivning birinchi qismi o‘rtasida joylashgan yozuvga qilinadi. Aks
holda, massivning ikkinchi qismi o‘rtasida joylashgan yozuvga murojaat qilinadi. Ushbu
protsedura massivning 1/4, 1/8, 1/16 va xokazo qismlarida, izlanayotgan yozuv topilgunga
qadar yoki izlash olib borilayotgan interval bo‘sh bo‘lgunga qadar olib boriladi. Usulning
kamchiligi shundan iboratki, har ikki murojaat o‘rtasida muayyan manzil yoki keyingi
o‘qiladigan yozuv nomeri uchun hisoblashlar olib borish zarur.
3.Ikkilangan daraxt bo’yicha izlash
Axborot izlashning ko‘rib chiqilgan eng tezkor usullaridan biri binar izlash xisoblanadi.
Lekin bu usul faqat ba’zi bir cheklashlar bilan qo‘llaniladi: undan faqat uzunligi qaydlangan
tartibga solingan yozuv massivlarida ma’lumotlar ketma-ket taqdim etiladigan xollarda
foydalanish mumkin, izlash jarayonida esa muayyan hisoblashlarni bajarish zarur. Shuni
qayd etib o‘tish kerakki, ketma-ket tartibga solingan ma’lumotlar izlash uchun qulay, yuritish
uchun noqulay, chunki yozuvlarni qo‘shish yoki o‘chirishda har bir massivni qayta yozish
talab etiladi. Ma’lumotlarning tuzilishi ikkilangan daraxt shaklida bo‘lgandagina
ma’lumotlarni bog‘langan tarzda taqdim etishdan foydalanadigan massivlarda tezkor izlash
olib borish mumkin. Bunday massivlarda tezkor izlashdan tashqari yozuvlarni kiritish va
o‘chirish xam oson. Ikkilangan daraxt shaklidagi tuzilmada izlash ko‘rsatkichlar ko‘rsatib
turadigan yo‘nalishda olib boriladi. Bo‘g‘inning o‘ng ko‘rsatkichi kaliti katta yozuvlarga,
chap ko‘rsatkich esa kaliti kichik yozuvlarga olib boradi. Navbatdagi yozuv manzili va
nomeri bunda talab etilmaydi. Birinchi murojaat daraxt ildiziga qaratiladi. Bunda keyingi har
bir murojaat qilishda izlash argumenti joriy bo‘g‘inning yozuvi kaliti bilan solishtiriladi va
keyingi murojaat yo‘nalishi aniqlanadi. Agar solishtirish natijasida izlash argumenti qiymati
joriy bo‘g‘in yozuvi kalitidan katta bo‘lsa, keyingi murojaat aloqaning o‘ng manzili bo‘yicha
qilinadi, aks xolda, o‘ng kichik daraxtdan chiqqan bo‘g‘inga murojaat qilinadi. Ikkilangan
muvozanatlashtirilgan daraxt bo‘yicha izlashda solishtirishlar soni kam bo‘ladi va vaqt xam
kam talab etiladi. Muvozanatlashtirilgan ikkilangan daraxtda izlashda solishtirishlarning
o‘rtacha soni log2N ga mutanosib, bu erda N - daraxt bo‘g‘inlari soni. Yaxshi
muvozanatlashgan daraxtda solishtirishlarning eng katta soni daraxt darajalari soniga teng
bo‘ladi. Ikkilangan daraxt bo‘yicha izlash jarayonida yangi elementni qo‘yish mumkin
bo‘ladi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_40.png)
![Rasmda tasvirlangan daraxt tuzilishiga ega yozuvlar massiviga kalit 12 li yozuvni qo‘yish
kerak bo‘lsin. Izlash jarayonida to‘rtta solishtirish operatsiyasidan keyin bunday kalitli yozuv
massivda mavjud emasligi aniqlanadi. Agar yozuv joylashtirilgan xotira uyasiga kalit 11 li
o‘ng ko‘rsatkich o‘rnatilsa, bu yozuv tuzilmaga kiritilgan bo‘ladi.
Muvozanatlashtirilgan ikkilangan daraxt tuzilmasi ma’lumotlarning eng moslashuvchan
tuzilmasi xisoblanadi. U massivni yuritish uchun eng yaxshi imkoniyatlarni (uning
cheklanmagan o‘sishini, yozuvlarni tez qo‘yish va o‘chirish ), eng tez saralash va izlashni
ta’minlab beradi.
struct node {
int data;
struct node* left;
struct node* right;
}
static int lookup(struct node* node, int tar get) {
if (node == NULL) {
return(false);
}>
else {
// 2. see if found here
if (target == node->data) return(true);
else {
if (target < node->data) return(lookup(node->left, target));
else return(lookup(node->right, target));
}}}](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_41.png)
![9-mustaqil ish
Mavzu: Algoritmlashtirishda graflar nazariyasi, graflarni algoritmlashtirish
Reja:
1.Graflar
2. Graflar nazariyasining asosiy tushunchalari
3 Grafni tasvirlash usullari .
Graflarni o rganish bilan shug ullanadigan diskret matematikaning bo limi “Graflarʻ ʻ ʻ
nazariyasi” deb ataladi. Graflar nazariyasida ushbu matematik obyektlarning asosiy
tushunchalari, xususiyatlari, tasvirlash usullari va qo llanilish sohalari batafsil ko rib
ʻ ʻ
chiqilgan. Bizni faqat dasturlashda muhim bo lgan jihatlari qiziqtiradi.
ʻ
Graflar - bu chiziqlar bilan bog langan nuqtalar to plami.
ʻ ʻ Nuqtalar uchlar (tugunlar)
chiziqlar esa qirralar (yoylar) deb nomlanadi.
Grafning ifodalanishi.
Grafning to plam nazariya bo yicha ta’rifi
ʻ ʻ . Bizga V - bo sh bo lmagan to plam berilgan, ʻ ʻ ʻ
masalan
{v1,v2,v3,v4,v5} .
Uning barcha ikki elementli
V(2) ichki to plamlari to plamini yozamiz. Bizning misolimiz ʻ ʻ
uchun ushbu to plam quyidagicha bo ladi:
ʻ ʻ
Ixtiyor ravishda ba’zi bir
E⊆V(2) ni olamiz, masalan:
⟨ V , E ⟩
juftligi yo naltirilmagan G grafi deb nomlanadi, unda ʻ V - uchlar to plami, ʻ E
-
qirralarning to plami,
ʻ V(2) to plamining ichki to plami hisoblanadi. ʻ ʻ
Yuqoridagilardan kelib chiqib, ushbu ta’rif odatda quyidagicha shakllantiriladi:
⟨ V , E ⟩
oriyentirlanmagan graflar juftligi deb ataladi, agar
V uchlar deb ataladigan bo sh bo lmagan ʻ ʻ
elementlar to plami bo lsa va
ʻ ʻ E
– V dagi qirralar deb ataluvchi turli elementlarning tartibsiz
juftlari to plami bo lsa.
ʻ ʻ
Graflar nazariyasida turli xil munosabatlarni yozishda VG yoki V(G) yozuvlari, G graf
qirralarining to plami uchun EG yoki E(G) yozuvlari ishlatiladi.
ʻ
Graf - bu abstrakt obyekt bo lib, uchlar to plami (tugunlar) va qirralarning to plami - uchlar
ʻ ʻ ʻ
juftliklari orasidagi bog lanishlardan tashkil topadi (ulanishlar). Graf mavzusi juda keng.
ʻ
Graflar diskret matematikaning o rganish mavzusidir (bu yerda graf tushunchasining aniqroq
ʻ
ta’rifi berilgan). Graf murakkab tuzilgan ma’lumotni tavsiflash uchun ishlatiladi va shuning
uchun katta amaliy ahamiyatga ega. Matematikada graflar paydo bo lishiga Eyler asarlari
ʻ
yordam berdi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_42.png)
![G graf - G: = (V, E) tartiblangan juftlik, bu yerda V - uchlarning (yoki tugunlarning) bo shʻ
bo lmagan to plami, E esa qirralar deb nomlangan uchlarning juftlari to plamidir. Grafning
ʻ ʻ ʻ
uchlari va qirralari (ular graf elementlari deb ataladi), grafdagi uchlar soni | V | - graf tartibi,
qirralarning soni | E | - graf hajmi deb ataladi.
Graflar nazariyasining asosiy tushunchalari
Grafdagi marshrut - bu har bir uch ( oxirgisidan tashqari ) ketma - ketlikdagi keyingi uchga
qirra bilan bog ʻ langan uchlarning cheklangan ketma - ketligi .
Yo ʻ l - bu qirralarning takrorlanmagan yo ʻ lidir . Oddiy zanjir - bu uchlarni takrorlamaydigan
marshrut ( bu oddiy zanjirda takrorlanadigan qirralarning yo ʻ qligini anglatadi )
Orgrafdagi yo ʻ naltirilgan marshrut ( yoki yo ʻ l ) - bu har bir element oldingi va keyingi
qismga tushadigan uchlar va yoylarning cheklangan ketma - ketligi .
Birinchi va oxirgi uchlar bir - biriga to ʻ g ʻ ri keladigan zanjirlar sikl deb ataladi (1- rasmda ACD
va ACDE sikllar )
Yo ʻ lning ( yoki siklning ) uzunligi uni tashkil etuvchi qirralarning soni deyiladi
Agar uning qirralari takrorlanmasa , yo ʻ l ( yoki sikl ) oddiy deb nomlanadi ; agar u sodda
bo ʻ lsa va undagi tepaliklar takrorlanmasa u elementar deb nomlanadi .
Graf turlari . Yo ʻ naltirilgan graf - ( qisqacha orgraf ) - qirralari yo ʻ naltirilgan graf (4- rasm
pastga qarang ).
Yo ʻ naltirilmagan graf - uchlar juftligi tartiblanmagan graf (22- rasm )
Bog ʻ langan graf - bu har qanday uch juftligi o ʻ rtasida kamida bitta yo ʻ l mavjud bo ʻ lgan
graf .
Daraxt - bu bog ʻ langan asiklik grafik , ya ’ ni sikllar yo ʻ q va tepalik juftligi orasida bitta yo ʻ l
bor (18- rasm ). Kirishning nol darajasiga ega bo ʻ lgan uch daraxtning ildizi , chiqish nol
darajaga ega tugunlar esa barglar deb nomlanadi .
Bog ʻ langan va bog ʻ lanmagan graflar . 16- rasmda ko ʻ rsatilganlar graflarni ikki guruhga
bo ʻ lish mumkin ( kesilgan chiziq bilan ajratilgan ): bog ʻ lanmagan (
G1−G5 ) va bog ʻ langan (
G6−G11
).
Bog ʻ lanmagan graflarda qirralar bilan ulanmagan ikki yoki undan ortiq qismlar mavjud
bo ʻ ladi . Ushbu qismlar bog ʻ lanish komponentlari deb ataladi .
Yuqorida keltirilgan graflarda G
1 da to ʻ rtta komponent , G
2 da uchta komponent ,
G3,G4va G5 da
2 ta komponent mavjud , qolganlarida esa bittadan komponent mavjud .
G6 va G11 graflari
o ʻ rtasida G
11 grafini alohida ajratib ko ʻ rsatish mumkin , chunki to ʻ rtinchi darajali graf uchun
maksimal sondagi qirralarga ega .](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_43.png)
![Daraxtlar va zanjirlar . Bog ʻ langan graflarda minimal miqdordagi qirralar mavjud bo ʻ lsa , (|
EG | = n − 1
) ular daraxtlar sinfini tashkil etadi . Yuqorida rasmda bu G
6 va G7 daraxtga to ʻ g ʻ ri
keladi . Daraxtlar haqida keyingi mavzuda batafsil to ʻ xtalamiz . Bu y erda biz 16-rasmda P 4
sifatida belgilangan G 7 grafini qayd etamiz , bu daraxtning alohida holati va oddiy zanjir deb
ataladi .
Grafni tasvirlash usullari
Grafni tasvirlash uchun bir nechta usullardan foydalaniladi. Graflardan o tish uchun siz
ʻ
o zingizning muammoingizni eng samarali hal qiladiganlardan foydalanishingiz kerak.
ʻ
Ko pincha, tanlov qo shnilik matritsasi va qo shnilik ro yxati o rtasida bo ladi (quyidagi
ʻ ʻ ʻ ʻ ʻ ʻ
jadval ikkala yondashuvning samaradorligini taqqoslaydi). Shu bilan birga, o rnatilgan C-
ʻ
massivga tayanib, o zingizning ma’lumotlar tuzilmalaringizni modellashtirishingiz va STD-
ʻ
da mavjud bo lgan turli xil konteynerlardan foydalanishingiz mumkin.
ʻ
Qo shnilik matritsasi.
ʻ Qo shnilik matritsasini n-tartibli ʻ A=[ai,aj] nosimmetrik kvadrat
matritsa sifatida aniqlaymiz, unda a
i , j elementlar 1 ga teng, agar grafda {
vi,V j } qirrasi bo lsa, ʻ
ya’ni
vi va vj qo shni bo lsa, 0 ga teng, agar bunday qirra mavjud bo lmasa. ʻ ʻ ʻ
Ta’rifdan kelib chiqadiki, har qanday i uchun
∑
j = 1n
a
i , j = d ( v
i )
, har qanday j uchun
∑i=1
n
ai,j=d(vj)
va
∑
i = 1n
∑
j = 1n
a
i , j = 2 m
, ya’ni qo shnilik matritsasining har qanday qatori yoki ʻ
ustunidagi birlar soni grafning tegishli vertikal darajasiga teng va ularning umumiy soni
uning qirralarining ikki baravariga teng.
Misol sifatida –rasmda berilgan G
grafning A qo shnilik matritsasini
ʻ deg v
i darajalar
ketma-ketligini yozamiz.
Yo naltirilmagan grafda qo shnilik matritsasi
ʻ ʻ](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_44.png)
![Yo naltirilgan grafda qo shnilik matritsasiʻ ʻ
Qo shnilik matritsasini amalga oshirish uchun massivlar massivi qo llaniladi: vektorlar
ʻ ʻ
vektori (vector<vektor<bool>>) yoki kaliti uchlar soni, qiymati esa <bool> vektori. Agar
grafni kengaytirish kerak bo lmasa, u holda vektorni
ʻ array (massiv) bilan almashtirish
kerak.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_45.png)
![10-mustaqil ish
Mavzu: Kombinatorika elementlarini dasturlash va algoritmlashtirish
Reja:
1 Kirish
2. Kombinatorik masalalar va tartiblangan to‘plamlar
3. Kombinatorik masalalar va ularni yechishda qo‘llaniladigan qoidalar
4 Takrorsiz o‘rin almashtirishlar
5. Takrorsiz o‘rinlashtirishlar
6. Takrorlanuvchi o‘rinlashtirishlar
Ehtimollar nazariyasi va matematik statistika – bir-birga uzviy bog‘liq matematik fanlar
hisoblanadi. Hozirgi paytda bu sohalar bo‘yicha olingan bilimlar turli kasb mutaxassislariga
juda ham ham zurur. O‘z faoliyatini maqsadini aniqlay olish va unga erishish uchun shaxdam
qadamlar qo‘yish – kompetentli, raqobatbardosh qobiliyatli mutaxassisning xarakterli
xususiyati, ehtimollar nazariyasi va matematik statistika esa har qanday fanga qaraganda
ko‘proq shaxsning ijobiy o‘zgarishlari uchun yordam beradi. Ommaviy tasodifiy jarayonlar
qonuniyatlarini (ehtimollar nazariyasi fani) va kuzatishlar natijalarini qayta ishlash muhim
usul va yo‘llarini (matematik statistika o‘rganadigan) bilish har bir kasbdagi mutaxassis
uchun amaliy masalalarni yechishda qo‘l keladi. Ehtimollar nazariyasi va matematik
statistikani o‘rganishni esa avvalo kombinatorika asoslari bilan tanishmasdan mumkin
bo‘lmaydi. «Kombinatorika» atamasi matematikaga Leybnits tomonidan kiritilgan bo‘lib, uni
1666 yilda chop etilgan «Kombinatorika san’ati to‘g‘risida mulohazalar» nomli kitobida
birinchi marta qo‘llagan edi. Hozirgi vaqtda kombinatorik usullar informatsiya nazariyasi
muammolarini, chiziqli dasturlash masalalarini yechishda, transport masalalarini yechish
uchun va h.k.larni hal qilishda keng qo‘llanilmoqda. Kombinatorik masalalar nafaqat
matematika go‘zalligini ko‘rsatishga, balki amaliy matematik masalarni yechishda yangi
kompyuter texnoogiyalarining imkoniyatlarini ko‘rsatishga imkon beradi. Diskret
matematikaning masalalaridan hisoblangan kombinatorik masalalar ko‘pincha ob’ektlarning
turli kombinatorik konfiguratsiyalarini tanlashga va ular orasidan u yoki bu masala shartigav
nuqtai nazaridan eng yaxshisini tanlashga olib kelinadi. Shuning uchun keng tarqalgan
kombinatorik konfiguratsiyalarni hosil qilish algoritmlarini bilish masalani butunlay
muvaffaqiyatli yechishning zarur sharti hisoblanadi. Uslubiy qo‘llanmada matematika
o‘qitishda kombinatorika elementlarini o‘rganish samaradorligini oshirish maqsadida
kombinatorika fanining asosiy 5 tushunchalari, kombinatorika elementlarini o‘rganish
xususiyatlari, o‘qitish jarayonida kombinatorika elementlarini o‘rgatish bilan birga
o‘quvchilarning ijodiy faolligini oshirish bo‘yicha uslubiy tavsiyalar bayon etilgan
Kombinatorik masalalar va tartiblangan to‘plamlar. 1. Kombinatorika predmeti va
paydo bo‘lish tarixi. Matematikaning kombinatorik tahlil, kombinatorik matematika,
birlashmalar nazariyasi, qisqacha, kombinatorika deb ataluvchi bo‘limida chekli yoki
muayyan ma‘noda cheklilik shartini qanoatlantiruvchi to‘plamni (bu to‘plamning elementlari
qanday bo‘lishining ahamiyati yo‘q: harflar, sonlar, hodisalar, qandaydir predmetlar va
boshqalar) qismlarga ajratish, ularni o‘rinlash va o‘zaro joylash ya‘ni, kombinatsiyalar,
kombinatorik tuzilmalar bilan bog‘liq masalalar o‘rganiladi. Hozirgi davrda kombinatorikaga](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_46.png)
![oid ma‘lumotlar inson faoliyatining turli sohalarida qo‘llanilmoqda. Jumladan, matematika,
kimyo, fizika, biologiya, lingvistika, axborot texnologiyalari va boshqa sohalar bilan ish
ko‘ruvchi mutaxassislar kombinatorikaning xilma-xil masalalariga duch keladilar.
To‘plamlar nazariyasi iboralari bilan aytganda, kombinatorikada kortejlar va to‘plamlar,
ularning birlashmalari va kesishmalari hamda kortejlar va qism to‘plamlarni turli usullar
bilan tartiblash masalalari qaraladi. To‘plam yoki kortej elementlarining berilgan xossaga
ega konfiguratsiyasi bor yoki yo‘qligini tekshirish, bor bo‘lsa, ularni tuzish va sonini topish
usullarini o‘rganish hamda 7 bu usullarni biror parametr bo‘yicha takomillashtirish
kombinatorikaning asosiy masalalari hisoblanadi. Kombinatorikaning ba’zi elementlari
eramizdan oldingi II asrda hindistonliklarga ma‘lum edi. Ular hozirgi vaqtda gruppalashlar
deb ataluvchi kombinatorik tushunchadan foydalanishgan. Eramizning XII asrida Bxaskara
Acharya o‘zining ilmiy tadqiqotlarida gruppalash va o‘rin almashtirishlarni qo‘llagan.
Tarixiy ma‘lumotlarga ko‘ra, hindistonlik olimlar kombinatorika elementlaridan, jumladan,
birlashmalardan foydalanib, she‘riy asarlar tarkibiy tuzilishining mukammalligini tahlil
qilishga uringanlar. Umuman olganda, kombinatorikaning dastlabki rivoji qimor o‘yinlarini
tahlil qilish bilan bog‘liq. Ba‘zi atoqli matematiklar, masalan, fransuz matematigi B.Paskal
(1623-1662), sveytasriyalik matematik Ya.Bernulli (1654- 1705), L.Eyler (1707-1783), rus
matematigi P.L.Chebishev (1821-1894) turli o‘yinlarda (tanga tashlash, soqqa tashlash, qarta
o‘yinlari va shu kabilarda) ilmiy jihatdan asoslangan qarorlar qabul qilishda kombinatorikani
qo‘llashgan
2. Kombinatorik masalalar va ularni yechishda qo‘llaniladigan
qoidalar . Ikkita chekli to‘plamning Dekart ko‘paytmasidagi juftliklarni
hisoblash qoidasi va uni to‘plamlar n ta bo‘lgan hol uchun umumlashtirish
kombinatorik masalalar deb ataluvchi masalalarni yechishda keng qo‘llaniladi.
Kombinatorik masalalar – bu shunday masalalarki, ular chekli to‘plamlar
elementlaridan turli-tuman kombinatsiya (birlashma) larning ba’zi qoidalari
bo‘yicha tuziladi. Jumladan, “4, 5, 6 raqamlardan foydalanib, mumkin bo‘lgan
barcha ikki xonali sonlarni shunday yozingki, sonning yozuvida ayni bir raqam
takrorlanmasin” degan masalada 4, 5, 6 raqamlar bilan bajariladigan turli
kombinatsiyalarni, bu kombinatsiyalarda raqamlar takrorlanmasligi shartida ko‘rib
chiqish talab etiladi.
Hayotda ham kombinatorik masalalar ko‘plab uchraydi, bunda ob’yektlarning
biror to‘plamidan uning qism to‘plamlarini tanlash, to‘plam elementlarini biron bir
tartibda joylashtirish va hokazolar qaraladi. Masalan, fermer o‘z ishchilariga turli
ishlarni bo‘lib berishi, katta jamoa ichidan delegatlar tanlash, shaxmat o‘yinida
turli yurishlar seriyasidan eng ma’qulini tanlash kombinatorik masalalardan
iboratdir.
Ko‘plab kombinatorik masalalarni yechishda qo‘shish va ko‘paytirish
qoidalari qo‘l keladi:
a) qo‘shish qoidasi: agar X to‘plam m elementli, Y to‘plam esa n elementli bo‘lsa va ular
o‘zaro kesishmasa, X Y to‘plamning elementlari soni n m ga teng, ya’ni agar X Y
bo‘lsa, n(X Y) n(X) n(Y) bo‘ladi. Umuman ixtiyoriy ikki X va Y to‘plamlar uchun](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_47.png)
![n(X Y) n(X) n(Y) n(X Y) o‘rinli bo‘ladi. b) ko‘paytirish qoidasi: agar X to‘plam m
elementga, Y to‘plam n elementga ega bo‘lsa, u holda X Y to‘plam (Dekart ko‘paytma) m
n elementga ega bo‘ladi. Haqiqatdan, { , ,..., }, 1 2 m X x x x { , ,..., } 1 2 n Y y y y
bo‘lsa, X Y to‘plam ushbu mumkin bo‘lgan barcha juftliklardan tashkil topadi: ( , ), 1 1 x y
( , ),..., 1 2 x y ( , ) 1 n x y ( , ), 2 1 x y ( , ),..., 2 2 x y ( , ) 2 n x y ………………………….
10 ( , ), 1 x y m ( , ),..., 2 x y m ( , ) m n x y Ko‘rinib turibdiki, bu juftliklar soni m n ga
teng. Buni qisqacha n(X Y) n(X ) n(Y) ko‘rinishda ham yozish mumkin. Umuman, n
ta n x , x ,...,x 1 2 to‘plamlar berilgan bo‘lsa, u holda ( .... ) ( ) ( ) .... ( ) 1 2 n 1 2 n n x x
x n x n x n x tenglik o‘rinli bo‘ladi
3. Takrorsiz o‘rin almashtirishlar .
Agar chekli X to‘plamning elementlari qandaydir yo‘l bilan raqamlangan bo‘lsa, uni
tartiblangan to‘plam deymiz: { , ,..., }. 1 2 n X x x x Kortej tushunchasidan farqli o‘laroq
tartiblangan to‘plam elemetlari orasida o‘zaro tenglari bo‘lmaydi. Masalan, (2,3,2,4,5) kortej
tartiblangan to‘plam emas, (2,3,4,5) esa tartiblangan to‘plam bo‘ladi. Bitta to‘plamni turlicha
tartiblash mumkin. m A B C a b 1 2 3 11 elementli X to‘plamni necha xil usul bilan tartiblash
mumkin degan masalani qaraymiz. Har bir tartiblash quyidagicha amalga oshiriladi.
To‘plamning qaysi bir elementini 1-nomer bilan, qaysi birini 2-nomer bilan va hokazo qaysi
bir elementini m nomer bilan belgilaymiz. Agar birinchi element tanlangan bo‘lsa, ikkinchi
elementni tanlash (m–1) ta elementning ichidan olinadi. Demak, birinchi element m usul
bilan, ikkinchisi esa (m–1) usul bilan tanlanadi. Uchinchi element (m–2) usul bilan va
hokazo oxirgi element m-o‘rinni egallaydi. Masalan, {5,6,7} elementli to‘plam quyidagicha
tartiblanadi 567, 657, 756 – birinchi element 3 usul bilan olindi. 657, 756 – ikkinchi element
2 usul bilan tanlandi. Oxirgi tartiblash 765 bo‘ladi. Umumiy holda ko‘paytirish qoidasiga
asosan tartiblash usulining umumiy soni P m(m 1)...1 m! m ga teng bo‘ladi. Bunday
tartiblash m elementdan takrorlanmaydigan o‘rin almashtirish deyiladi. Bunda har bir
tartiblangan to‘plamning elementlari turlicha bo‘ladi.
4. Takrorsiz o‘rinlashtirishlar .
Endi m elementli X to‘plam elementlaridan nechta k elementli tartiblangan to‘plamlar tuzish
mumkin degan masalani qaraymiz. Bu masalaning yuqoridagi masaladan farqi shundaki, bu
yerda k elementli tartiblangan to‘plamni tuzish k ta elementni olish bilan tugallanadi. Bunday
tartiblangan to‘plamlarning sonini topish uchun k ta m, m–1, m–2, …, m–k+1 sonlarni
ko‘paytirish yetarli (chunki {m, m–1, m–2,…,m–k+1} to‘plamda k ta element mavjud).
Shunday qilib, X to‘plamdagi k elementli tartiblangan to‘plamlar soni A m(m 1)(m 2)...
(m k 1) n m ga teng bo‘ladi. Bunday tartiblangan to‘plamlarni m elementdan k tadan
takrorlanmaydigan o‘rinlashtirishlar deyiladi. n Am ning ifodasini 1 2...(m k) ga
ko‘paytirib va bo‘lib, uning ko‘rinishini o‘zgartirish mumkin: ( )! ! 1 2...( ) ( 1)( 2)...( 1)( )...2
1 m k m m k m m m m k m k A k m 12 Bunda A P m! m m m
bo‘ladi, bu yerda 0!=1 deb olinadi.
5. Takrorlanuvchi o‘rinlashtirishlar .
Bu yerda quyidagi masala qaraladi: m elementli X to‘plamdan nechta uzunligi k ga teng
bo‘lgan kortejlar tuzish mumkin. Bu masalani hal qilish uchun X X ... X dan iborat k
ta ko‘paytuvchiga ega bo‘lgan Dekart ko‘paytmadagi kortejlar sonini topish yetarli. Bunda k](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_48.png)
![m k n(X X ... X) n(X)n(X)...n(X) m m....m m A Demak, m elementli X
to‘plamdan tuzilgan uzunligi k ga teng bo‘lgan kortejlar soni k k Am m ga teng. m
elementli X to‘plam elementlaridan tuzilgan uzunligi k ga teng bo‘lgan kortej, m elementdan
k tadan tuzilgan takrorlanadigan o‘rinlashtirish deyiladi.](/data/documents/b3a5486c-0147-42a1-b7fc-bf295d54c605/page_49.png)
ALGORITM VA MA’LUMOTLAR STRUKTURASI fanidan yozgan Tekshirdi:_____________________________ MUSTAQIL ISHI
1-mustaqil ish Mavzu: Ma’lumotlar tuzilmasi,tuzilmalar ustida bajariladigan amallar. Dasturlash texnologiyalari. Reja: 1.Ma’lumotlar tuzilmasi 2. Ma’lumotlar tuzilmalari ustida quyidagi amallarni bajarish mumkin: Ma’lumotlar tuzilmasi bu xotirada tashkil etiladigan elementlar yig’indisi bo’lib, ular ustida dastur yordamida amallar bajariladi. Ma’lumotlar tuzilmasi – bu bironta toifaga tegishli bo’lgan va o’zaro ma’lum munosabatga ega bo’lgan elementlar to’plamiga aytiladi. Ma’lumot – bironta qiymat yoki qiymatlar to’plami hisoblanadi.Misol uchun bu bironta eksperiment natijalari, yoki talabalarning imtixon ballari bo’lishi mumkin. Ma’lumotlar tuzilmasi elementi – bu qiymatlar to’plamining bir bo’lagi hisoblanadi. Tuzilma elementi – qiymatlar jamlanmasi bo’lib, misol uchun talabalarning ismi, sharifi, yoshi har bir fandan olgan bahosi va x.k. larni keltirish mumkin. Elementlar 2 taga bo’linishi mumkin: Element sifatida ma’lumotlar guruhi olib qaraladi. Bunda e;lementlar yana qism bo’lak;arga bo’linishi mumkin. Masalan, ota-onalar maydoni talabalarning ota va onalari xaqida ma’lumot saqlaydigan alohida maydonlardan tashkil topadi. Elementar, ya’ni bo’linmas, bunda element qism bo’laklarga ajratilmaydi. Ob’ekt – bu xususiyatlar va attributlariga ega bo’lgan va bu xususiyatlarga qiymat qabul qilishi mumkin bo’lgan tuzilma hisoblanadi. Masalan, talaba bu ob’ekt deb qaralishi mumkin tuzilma. Maydon – bu ob’ektlarning attributlari yoki xususiyatlarini ifodalovchi tushuncha bo’lib, sonli yoki son bo’lmagan qiymatlarni o’zlashtirishi mumkin. Yozuv – bu bironta ob’ektga tegishli turli toifadagi maydonlar to’plamidir. Fayl - bu bir-biriga bog’liq bo’lgan yozuvlar to’plamidir. Masalan, barcha talabalar xaqidagi yozuvlarni o’z ichiga olishi mumkin, Kalit – bu yozuvdagi maydon bo’lib, aynan shu yozuvni boshqa yozuvlardan ajratib turishga xizmat qiladi , uning qiymati boshqa yozuvlarda takrorlanmas hisoblanadi. Ba’zida bittadan ko’p maydonlar qiymatlari elementlararo betakror bo’lishi mumkin va bunga karrali kalit deyiladi. Ko’pincha asosiy kalit hisoblanadigan bitta maydon ma’lumoti ishlatiladi va u boshlang’ich kalit deyiladi, qolganlari esa alternativ kalit deyiladi. Ba’zida esa yozuvlaning yagona qiymatlatli kalit maydonni yo’qligi sababli kalit sifatida bir nechta maydonlar olinadi va ularga tarkibli kalit deyiladi. Eng yomon
holatda, ba’zan shunaqa bo’lishi mumkinki, bironta maydon kalit bo’la olmasa, xar bit elementga qo’shimcha, qiymati yagona bo’lgan kalit maydon kiritiladi. Ma’lumotlar tuzilmasi Ma’lumotlar turli yo’lar asosida tashkil etilishi mumkin, mantiqiy yoki matematik modelni tashkil etilishi ma’lumotlar tuzilmasi deyiladi. Konkret bir ma’lumotlar tuzilmasini tanlash quyidagilarga bog’liq: Real voqe’likda elementlararo munosabatni yaqqol ifodalay olishi kerak; U shunday soda tuzilishi kerakki, zarur bo’lganda ustida samarali amal bajarish mumkin bo’lsin. Ma’lumotlar tuzilmasini o’rganish quyidagilardan iborat: Tuzilmani mantiqiy ifodalash; Tuzilmani fiizik amalga oshirish ; Tuzilmani sifatiy taxlili, ya’ni elementlarni saqlash uchun qancha xotira xajmi sarflanishini aniqlash (xotira sarfi) va qayta ishlashga ketadigan vaqtni (vaqt sarfi) xisoblash nazarda tutiladi. Ma’lumotlar tuzilmalari ustida quyidagi amallarni bajarish mumkin: 1. Ko’rikdan o’tkazish (traversing) - tuzilma elementlariga 1 martadan murojaat qilish amali. 2. Kiritish – tuzilmaga yangi element kiritish amali. 3. O’chirish – tuzlmadan bironta elementni o’chirish amali. Bunda element shunday o’chirilishi kerakki, qolgan elementlar stabil holatda bo’lishi kerak, ya’ni ayrim tuzilmalarda nosozlik sezilishi kerak emas. 4. Qidirish – tuzilmadan bironta elementni joylashgan o’rnini aniqlash amali. 5. Saralash – elementlarni ma’lum bir tartibda joylashtirish amali. 6. Birlashtirish (merging) – ikkita tuzilmani birlashtirish amali. Ma’lumotlar tuzilmasi (MT) – informatsion ob’ektning umumiy xossasi bo‘lib, mazkur xossa bilan biror bir dastur o‘zaro aloqador bo‘ladi. Ushbu umumiy xossa quyidagilar orqali tavsiflanadi: 1) mazkur tuzilmaning mumkin (qabul qilishi mumkin) bo‘lgan qiymatlari to‘plami; 2) mumkin bo‘lgan amallar (operatsiyalar) majmuasi; 3) tashkil etilganlik tasnifi.
2-mustaqil ish Mavzu: Algoritmlarni murakkablik darajalasining tahlili, murak-kablik darajasini baholash usullari. Reja: 1 Algoritmning asosiy xossalari 2 Algoritmlarning murakkabligi . 3 Murakkablikni baholash 4 Algoritmlar murakkabligining o sish tartibiʻ 1-ta’rif. Algoritm - bu ma’lum bir tilda berilgan, mumkin bo lgan dastlabki ʻ ma’lumotlar sinfi uchun masalani hal qilish uchun mumkin bo lgan elementar amallarning ʻ cheklangan ketma-ketligi. Algoritmning asosiy xossalari haqida quyidagilarni ta’kidlash mumkin: 1-xossa . Diskretlilik, ya’ni algoritmni chekli sondagi oddiy ko rsatmalar ketma- ʻ ketligi shaklida ifodalash mumkin. 2-xossa. Tushunarlilik, ya’ni ijrochiga tavsiya etilayotgan ko rsatmalar uning uchun ʻ tushunarli bo lishi shart, aks holda ijrochi oddiy amalni ham bajara olmay qolishi mumkin. ʻ Har bir ijrochining bajara olishi mumkin bo lgan ko rsatmalar tizimi mavjud. ʻ ʻ 3-xossa. Aniqlik, ya’ni ijrochiga berilayotgan ko rsatmalar aniq mazmunda bo lishi ʻ ʻ lozim hamda faqat algoritmda ko rsatilgan tartibda bajarilishi shart. ʻ 4-xossa . Ommaviylik, ya’ni har bir algoritm mazmuniga ko ra bir turdagi ʻ masalalarning barchasi uchun yaroqli bo lishi lozim ʻ . Masalan, ikki oddiy kasr umumiy maxrajini topish algoritmi har qanday kasrlar umumiy maxrajini topish uchun ishlatiladi. 5-xossa. Natijaviylik, ya’ni har bir algoritm chekli sondagi qadamlardan so ng ʻ albatta natija berishi lozim . Bu xossalar mohiyatini o rganish va konkret algoritmlar uchun qarab chiqish ʻ talabalarning xossalar mazmunini bilib olishlariga yordam beradi. Algoritmlar berilishi va ifodalanishiga qarab: chiziqli, tarmoqlanuvchi va takrorlanuvchi turlarga bo linadi. ʻ Algoritmlarning murakkabligi . Hisoblash muammolari cheklangan xotira resurslaridan foydalangan holda oqilona vaqt ichida yechilishi kerak. Bu algoritmning vaqt va fazoviy murakkabligi tushunchasiga olib keladi. Qoida tariqasida, algoritm turli vaqtlarni bajarishi mumkin bo lgan turli xil amallarni o z ichiga oladi. 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 kattaligig ʻ ʻ ʻ xizmat qilishi mumkin. Graflar haqidagi masalada o lcham sifatida graf ʻ uchlarining 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. ʻ Murakkablikni baholash . Algoritmlarning murakkabligi odatda bajarilish vaqti yoki ishlatilgan xotira bo yicha baholanadi. Ikkala holatda ham, murakkablik kiritilgan ʻ ma’lumotlarning hajmiga bog liq: 100 ta elementdan iborat massivi xuddi shunga ʻ o xshash 1000 ta elementdan iborat massivga qaraganda tezroq qayta ishlanadi. Shu bilan ʻ birga, aniq vaqt bilan bir necha kishi qiziqadi: bu protsessorgabog liq, ma’lumotlar turi, ʻ
dasturlash tili va boshqa ko plab parametrlarga ham bog liq. Faqatgina ʻ ʻ asimptotik murakkablik muhim, ya’ni kirish ma’lumotlarining kattaligi cheksizlikka intilayotgandagi murakkablik. Masalan, ba’zi bir algoritmga kirish ma’lumotlarining n ta elementlarini qayta ishlash uchun 4n 3 + 7n ta shartli amallarni bajarish kerak. n ning ortishi bilan ishning umumiy davomiyligi n ning kubi uni 4 ga ko paytirgandan yoki 7n ni qo shgandan ko ra ʻ ʻ ʻ ko proq ta’sir qiladi. Ushbu algoritmning vaqt murakkabligi O(n ʻ 3 ), ya’ni u kubik bilan kiritilgan ma’lumotlarning hajmiga bog liq bo ladi. Bosh harf ʻ ʻ O dan foydalanish matematikadan kelib chiqadi, bu yerda ushbu belgi funksiyalarning asimptotik harakatlarini taqqoslash uchun ishlatiladi. Rasmiy ravishda O(f(n)) algoritmning ishlash vaqti (yoki egallagan xotira miqdori), kiritilgan ma’lumotlarning hajmiga qarab, f(n) ga ko paytiriladigan ba’zi konstantalardan tezroq emasligini anglatadi. ʻ O (n) - chiziqli murakkablik. Bunday murakkablik, masalan, saralanmagan massivdagi eng katta elementni topish algoritmiga ega. Qaysi biri maksimal ekanligini aniqlash uchun massivning barcha n elementlaridan o tishimiz kerak bo ladi. ʻ ʻ O (log n) - logaritmik murakkablik . Eng oddiy misol - ikkilik qidirish. Agar massiv saralangan bo lsa, uni ʻ yarmiga bo lish orqali ma’lum bir qiymatga ega ekanligini tekshirishimiz mumkin. O rta ʻ ʻ elementni tekshirib ko ramiz, agar u kattaroq bo lsa, unda massivning ikkinchi yarmini ʻ ʻ tashlab yuboramiz. Agar kichikroq bo lsa, unda aksincha - biz dastlabki yarmini ʻ tashlaymiz va shu tarzda ikkiga bo linishni davom ettiramiz, natijada (logn) elementlarini ʻ tekshiramiz. O (n 2 ) - kvadratik murakkablik. Bunday murakkablik, masalan, element qo shilishi natijasida yangi saralash algoritmiga ega. Kanonik dasturda ʻ bu ikkita ichki sikldan iborat: biri butun massivni bosib o tish, ikkinchisi esa allaqachon ʻ ajratilgan qismdan keyingi element uchun joy topish. Shunday qilib, amallar soni n*n, ya’ni n 2 kabi massiv o lchamiga bog liq bo ladi. ʻ ʻ ʻ Murakkablikning boshqa ko rinishlari ʻ ham mavjud, ammo ularning barchasi bir xil prinsipga asoslanadi. Algoritmning ishlash vaqti umuman kiritilgan ma’lumotlarning hajmiga bog liq emasligi ham sodir bo ladi. Bu ʻ ʻ holda murakkablik O(1) bilan belgilanadi. Masalan, massivning uchinchi elementi qiymatini aniqlash uchun elementlarni eslab qolishingiz yoki ular orqali bir necha bor o tishingiz shart emas. Siz har doimma’lumotlarni kiritish oqimidagi uchinchi elementni ʻ kutishingiz kerak va bu esa siz uchun natija bo ladi, bu har qanday ma’lumot uchun ʻ hisoblash uchun bir xil vaqtni oladi. Baholash muhim bo lgan taqdirda xotiradan xuddi ʻ shu tarzda amalga oshiriladi. Biroq, algoritmlar kirish ma’lumotlarining hajmi boshqalarga nisbatan kattalashganda sezilarli darajada ko proq xotiradan foydalanishi mumkin, ammo ʻ ular tezroq ishlaydi va aksincha. Bu hozirgi sharoit va talablar asosida muammolarni hal qilishning eng yaxshi usullarini tanlashga yordam beradi. Algoritmlar murakkabligining o sish tartibi ʻ Murakkablikning o sish tartibi ʻ (yoki aksiomatik murakkablik) katta kirish hajmi uchun algoritmning murakkablik funksiyasining taxminiy xatti-harakatini tavsiflaydi. Bundan kelib chiqadiki, vaqt murakkabligini baholashda elementar amallarni ko rib chiqishning ʻ hojati yo q, algoritm qadamlarini ko rib chiqish kifoya. ʻ ʻ Algoritm qadami – bu ketma-ket joylashtirilgan elementar amallar to plami, uning ʻ bajarilish vaqti kirish qadamiga bog liq emas, ya’ni yuqoridan qandaydir doimiy bilan ʻ chegaralangan.