Alqoritm mürəkkəbliyi ilk növbədə iki resursa müraciət edir:
vaxt
(icra müddəti) və
boşluq
(yaddaş istifadəsi). Zaman mürəkkəbliyi giriş ölçüsü ilə işləmə vaxtının necə böyüdüyünü ölçür (
n
), məkanın mürəkkəbliyi yaddaş istehlakını qiymətləndirir. Məsələn:
- ilə bir alqoritm
O(n)
zaman mürəkkəbliyi giriş ölçüsü ilə xətti olaraq miqyaslanır.
- ilə bir alqoritm
O(1)
kosmik mürəkkəblik giriş ölçüsündən asılı olmayaraq daimi yaddaşdan istifadə edir.
Hər iki göstərici vacibdir. Sürətli bir alqoritm böyük verilənlər bazasında yaddaşı tükəndirə bilər, yaddaşdan səmərəli istifadə edən alqoritm isə real vaxt tətbiqləri üçün çox yavaş ola bilər.
Səmərəlilik mümkünlüyü diktə edir. 10 milyona qarşı 10 elementdən ibarət siyahını çeşidləməyi düşünün:
- A
qabarcıq çeşidi
(
O(n)
) kiçik verilənlər dəstləri üçün kifayət edə bilər, lakin böyüklər üçün qeyri-mümkün olur.
- A
birləşmə çeşidi
(
O(n log n)
) daha böyük verilənlər dəstlərini zərif şəkildə idarə edir, lakin əlavə yaddaş tələb edir.
Mürəkkəblik təhlili alqoritmləri müqayisə etmək üçün universal bir dil təqdim edir, aparatla bağlı xüsusi detalları mücərrəd edir. O, tərtibatçılara miqyaslılığı proqnozlaşdırmaq və kritik sistemlərdə darboğazlardan qaçmaq imkanı verir.
Asimptotik qeydlər funksiyaların məhdudlaşdırıcı davranışını təsvir edir, mürəkkəblik üçün stenoqrafiya təklif edir. Üç əsas qeydlərdir:
Big O notasiyası alqoritmin tutacağı maksimum vaxtı və ya məkanı müəyyən edir. Məsələn:
-
O(1)
: Sabit vaxt (məsələn, serial elementinə indekslə daxil olmaq).
-
O(n)
: Xətti vaxt (məsələn, siyahı vasitəsilə təkrarlama).
-
O(n)
: Kvadrat zaman (məsələn, qabarcıq sıralamasında iç içə döngələr).
Big O ən çox istifadə edilən metrikdir, çünki performans tavanlarına zəmanət verir.
Omega tələb olunan minimum vaxtı təsvir edir. Məsələn:
- Xətti axtarış var
(1)
əgər hədəf birinci elementdirsə.
Optimist olsa da, ən yaxşı vəziyyətin təhlili ən pis vəziyyətin planlaşdırılması üçün daha az məlumatlıdır.
Teta tam asimptotik davranışı təmsil edən Big O və Omega birləşdirir. Əgər alqoritmlər ən yaxşı və ən pis hallar eynidirsə:
-
(n log n)
orta və ən pis vəziyyət ssenarilərinin birləşməsinə aiddir.
Bu qeydlər artım templərinə diqqət yetirərək sabitləri və aşağı dərəcəli şərtləri mücərrəd edir. Məsələn, 2n + 3n + 4 asanlaşdırır O(n) çünki kvadrat termin böyük üçün üstünlük təşkil edir n .
Mürəkkəblik siniflərini başa düşmək alqoritmləri miqyaslılığa görə təsnif etməyə kömək edir. Ən çoxdan ən az səmərəliyə doğru bir iyerarxiya:
İcra müddəti və ya yaddaş kimi dəyişməz qalır
n
böyüyür.
-
Misal
: Hash cədvəlinin dəyərinə açarla daxil olmaq.
Runtime ilə loqarifmik artır
n
.
-
Misal
: İkili axtarış hər iterasiyada giriş sahəsini yarıya endirir.
Runtime ilə mütənasib olaraq tərəzi
n
.
-
Misal
: Çeşidlənməmiş siyahı vasitəsilə xətti axtarış.
Böl və fəth alqoritmlərində ümumidir.
-
Misal
: Sıralama və yığın çeşidləməni birləşdirin.
İç-içə təkrarlamalar partlayıcı böyüməyə səbəb olur.
-
Misal
: Bubble çeşidləmə və seçim çeşidi.
Hər əlavə girişlə icra müddəti ikiqat artır.
-
Misal
: Memoization olmadan rekursiv Fibonacci hesablanması.
Permutasiyaya əsaslanan alqoritmlər.
-
Misal
: Səyahət satıcısı probleminin kobud güc vasitəsilə həlli.
Arasındakı fərq O(n log n) və O(n) üçün kəskin olur n = 10 : birincisi millisaniyələrdə icra oluna bilər, ikincisi isə günlər çəkə bilər.
Alqoritmlər giriş konfiqurasiyalarına əsasən fərqli şəkildə işləyir. Bütün halların təhlili möhkəmliyi təmin edir:
Verilənlər bazası sorğusu optimallaşdırıcısı hash birləşmələri arasında seçim edə bilər ( O(n + m) ) və iç-içə döngə birləşməsi ( O(nm) ) verilənlərin paylanmasına əsaslanır. Ən pis vəziyyətin təhlili gözlənilməzliyin qəbuledilməz olduğu təhlükəsizlik baxımından kritik sistemlər (məsələn, aviasiya proqramı) üçün vacibdir.
Eyni problem müxtəlif alqoritmlərdən istifadə etməklə həll edilə bilər. Məsələn, dəyərlər siyahısında hədəf dəyərin axtarışı problemi xətti axtarış, ikili axtarış və ya hash cədvəlinin axtarışı kimi müxtəlif alqoritmlərdən istifadə etməklə həll edilə bilər.
Aşağıdakı cədvəl hədəf dəyərin axtarışı üçün bu alqoritmlərin zaman və məkan mürəkkəbliklərini müqayisə edir. n dəyərlər.
Alqoritmin seçimi problemin ölçüsündən, giriş xüsusiyyətlərindən və mövcud resurslardan asılıdır. Məsələn, siyahı kiçik və çeşidlənməmişsə, xətti axtarış ən yaxşı seçim ola bilər. Siyahı böyükdürsə və çeşidlənirsə, ikili axtarış ən yaxşı seçim ola bilər. Siyahı böyükdürsə və çeşidlənməyibsə, hash cədvəlinin axtarışı ən yaxşı seçim ola bilər.
Amortizasiya olunmuş təhlil əməliyyatlar ardıcıllığı üzrə orta vaxtı müəyyən edir.
-
Misal
: Dinamik massivlər dolu olduqda ikiqat tutum. Subay olarkən
itələmək
əməliyyat apara bilər
O(n)
vaxt, amortizasiya olunmuş dəyər qalır
O(1)
.
kimi alqoritmlər
Monte Karlo
və
Las Veqas
səmərəlilik üçün təsadüfi istifadə edin.
-
Misal
: Miller-Rabin primallıq testi ehtimal zəmanətlərinə malikdir, lakin deterministik metodlardan daha sürətlidir.
Bəzi problemlər (məsələn, Boolean təminatlılığı) bunlardır NP-tam , yəni heç bir məlum polinom zaman həlli mövcud deyil. Azaltma yolu ilə NP tamlığının sübut edilməsi hesablama sərtliyini təsnif etməyə kömək edir.
An O(n) klasterləşdirmə alqoritmi kd ağacları kimi təxmini metodlara keçməyə sövq edən kütləvi məlumat dəstləri üçün darboğaza çevrilə bilər ( O(n log n) ).
Açıq açar sistemləri sərtliyə əsaslanır O(2) hücumlara müqavimət göstərmək üçün problemlər (məsələn, tam faktorizasiya).
Real vaxt rejimində göstərmə mühərriklərinə üstünlük verilir O(1) 60+ FPS saxlamaq üçün fizika simulyasiyaları üçün alqoritmlər.
Mübadilələr vacibdir:
-
Zaman vs. Kosmos
: hash xəritələrindən istifadə edin (
O(1)
axtarışlar) yaddaş qiymətinə.
-
Sadəlik vs. Optimallıq
: Daxiletmə çeşidi (
O(n)
) kiçik, demək olar ki, çeşidlənmiş verilənlər dəstləri üçün üstünlük verilə bilər.
Rekursiv alqoritmlər üçün təkrarlanma münasibətləri modelinin işləmə müddəti. Məsələn, birləşmə növünün təkrarlanması:
[ T(n) = 2T(n/2) + O(n) ] həll edir
O(n log n)
vasitəsilə
Usta teorem
.
Empirik test nəzəri təhlili tamamlayır. Profilləşdirmə alətləri (məsələn, Valgrind, perf) real dünyadakı darboğazları aşkar edir.
piton
def linear_sum(arr):
cəmi = 0
arr sayı üçün:
cəmi += ədəd
cəmi qaytarın
def kvadrat_sum(arr):
cəmi = 0
üçün mən arr:
arr j üçün:
cəmi += i * j
cəmi qaytarın
ikən O(n) sabitləri mücərrədləşdirir, a 100n alqoritm a-dan daha yavaş ola bilər 0.01n praktiki üçün alqoritm n .
An O(n log n) alqoritm zəif işləyə bilər O(n) üçün n = 10 üst xərcə görə.
Yadda saxlanan Fibonaççi funksiyası ( O(n) boşluq) iterativ versiyadan fərqli olaraq böyük girişlərdə çökə bilər ( O(1) boşluq).
Özünü tarazlayan BST ( O(log n) axtarış) adi BST-dən daha təhlükəsizdir ( O(n) ən pis halda) etibarsız məlumatlar üçün.
Alqoritm mürəkkəbliyi təhlili hesablama səmərəliliyinin geniş mənzərəsi vasitəsilə tərtibatçıları istiqamətləndirən kompasdır. MTSC7196 tələbələri üçün bu intizamın mənimsənilməsi nəzəri bilik və praktiki təcrübə arasında körpü yaradır. Zaman və məkan tələblərini tədqiq etməklə, asimptotik hədləri müqayisə etməklə və real dünya mübadilələrində naviqasiya etməklə, tərtibatçılar zərif şəkildə ölçülən və etibarlı şəkildə işləyən sistemlər yarada bilərlər.
Məlumata əsaslanan innovasiya ilə müəyyən edilən bir dövrdə, bir-birini ayırd etmək bacarığı O(n log n) və bir O(n) həll yalnız akademik strateji imperativ deyil. Tədqiqatlarınızda irəlilədikcə unutmayın: mürəkkəblik təhlili yalnız rəqəmlər və simvollarla bağlı deyil. Bu, hesablamanın özünün ürək döyüntüsünü başa düşməkdən ibarətdir.
2019-cu ildən bəri, Guangzhou, Çin, zərgərlik istehsal bazasında u zərgərlik görüşülər. Biz bir zərgərlik müəssisəsi inteqrasiya dizayn, istehsal və satış.
+86-19924726359/+86-13431083798
Mərtəbə 13, Gome'nin West qalası Smart City, Xeyr. 33 Juxin Street, Haizhu rayonu, Guangzhou, Çin.