Algoritmlarni murakkabligini static va dinamik o`lchovlari.Vaqt va hajm bo`yicha qiyinchiliklari :
Biz algoritmlarni o’zaro baholashimizda ularga kiruvchi ma’lumotni ham
e’tiborga olishimizga to’g’ri keladi. Chunki ayni bir saralash algoritmi uchun
1000 ta kiruvchi elementni saralash 1s, 100 000 element uchun esa 4-5
soniya ketadigan bo’lsa, boshqa bir algoritm uchun esa bor-yo’g’i 2 s ketishi
mumkin. Bunday sharoitda qaysi algoritm yaxshi ekanini aytish mushkuldir.
Umumiy holatda esa algoritmni murakkabligini ayni bir kattalik bilan
baholash mumkin bo’ladi. Buni quyidagicha tushunish mumkin: agar
algoritmga kiruvchi N ma’lumotlar oshganida algoritmning bajarilish vaqti f(N)
funksiya bilan bir xilda ortsa algoritm O(f(N)) murakkablikka ega deyiladi.
Keling, yaxshisi A[NxN] matritsaning har bir qatoridagi maksimal
elementni topishni ko’rib chiqamiz:
Ushbu algoritmda i o’zgaruvchi 0 dan N-1 gacha o’zgarib kelyapti hamda uning har bir o’zgarishida j o’zgaruvchi ham shu oraliqda o’zgaryapti. Demak bunda jami N*N marta takrorlanish sodir bo’lyapti. Bundan esa f(N) = N*N ga teng bo’ladi va algoritmning murakkabligi O(N*N) ekanligini aniqlashimiz mumkin.
Endi algoritmni murakkablik darajasini baholashni ko’rib chiqaylik. Bunda algoritmdagi eng tez o’suvchi qismdan foydalanish kerak bo’ladi.
Tasavvur qiling algoritm N^3 + N murakkablikka ega bo’lsin. Bunda biz murakkablikni O(N^3) deb olishimiz yetarli bo’ladi. Chunki bu yerda tez o’suvchi qism bu N^3. Ya’ni +N ta qo’shimcha amalni hisoblashning hojati qolmaydi. Misol uchun N=100 bo’lsin, shunda jami 1000100 ta amal bajariladi va bu N^3 dan atigi 0.01% gagina farq qiladi.
2.Algoritmlarning eng yomon va o`rtacha holatlarda baholash :
Algoritmni buyurtma qilishning murakkabligini baholash algoritmlar murakkabligining
yuqori chegarasidir. Agar dastur katta murakkablik darajasiga ega bo'lsa, bu algoritm
haqiqatan ham uzoq davom etadi degani emas. Ba'zi bir ma'lumot to'plamlarida,
algoritmni bajarilishi ularning murakkabligi asosida taxmin qilishdan ancha kam vaqt
talab etadi. Masalan, A vektorda berilgan elementni qidiradigan kodni ko'rib
chiqing. Agar kerakli element ro'yxatning oxirida bo'lsa, unda dastur N bosqichni
bajarishi kerak bo'ladi. Bunday holda, algoritmning murakkabligi O (N) dir. Ushbu eng
yomon holatda, algoritmning ishlash vaqti maksimal bo'ladi. Boshqa tomondan, kerakli
narsa birinchi holatda ro'yxatda bo'lishi mumkin. Algoritm faqat bitta qadamni bajarishi
kerak. Bunday holat eng yaxshi deb nomlanadi va uning murakkabligi O (1) deb
baholanishi mumkin.
function Locate(data: integer): integer;
var
i: integer;
fl: boolean;
begin
fl:=false; i:=1;
while (not fl) and (i<=N) do
begin
if A[i]=data then
fl:=true
else
i:=i+1;
end;
if not fl then
i:=0;
Locate:=I;
end;
Do'stlaringiz bilan baham: |