Algoritm murakkabligining statik va dinamik o’lchovlari.
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;
Ushbu ikkala holat ham mumkin emas. Bizni kutilgan variant ko'proq qiziqtiradi. Agar ro'yxat elementi dastlab tasodifiy aralashtirilsa, unda kerakli element ro'yxatning istalgan joyida paydo bo'lishi mumkin.
3.
Dostları ilə paylaş: |