Ma'lumotlar tuzilmalarining ishlash tezligi tahlili
Big O notation algoritmning eng yomon holatdagi (worst-case) vaqt yoki xotira murakkabligini ifodalaydi.
Doimiy vaqt - Eng yaxshi
Logaritmik vaqt - Juda yaxshi
Chiziqli vaqt - Normal
N-logaritmik - Qoniqarli
Kvadratik - Sekin
Eksponensial - Juda sekin
| Ma'lumotlar Tuzilmasi | Access | Search | Insert | Delete | Space |
|---|---|---|---|---|---|
| Array | O(1) | O(n) | O(n) | O(n) | O(n) |
| Dynamic Array (List) | O(1) | O(n) | O(1)* | O(n) | O(n) |
| Stack | O(n) | O(n) | O(1) | O(1) | O(n) |
| Queue | O(n) | O(n) | O(1) | O(1) | O(n) |
| Singly LinkedList | O(n) | O(n) | O(1) | O(1) | O(n) |
| Doubly LinkedList | O(n) | O(n) | O(1) | O(1) | O(n) |
| Hash Table | O(1)* | O(1)* | O(1)* | O(1)* | O(n) |
| Binary Search Tree | O(log n)* | O(log n)* | O(log n)* | O(log n)* | O(n) |
| AVL Tree | O(log n) | O(log n) | O(log n) | O(log n) | O(n) |
| Binary Heap | O(n) | O(n) | O(log n) | O(log n) | O(n) |
* - Average case, Worst case farq qilishi mumkin
Oddiy, lekin sekin. Faqat kichik massivlar uchun.
Amalda eng tez. Ko'p qo'llaniladi.
Barqaror. Katta ma'lumotlar uchun yaxshi.
In-place. Kam xotira ishlatadi.
Afzalliklari:
Kamchiliklari:
Afzalliklari:
Kamchiliklari:
Afzalliklari:
Kamchiliklari:
Qaysi operatsiyalar ko'proq bajarilishini o'ylab, shunga mos tuzilmani tanlang. Masalan, ko'p qidiruv bo'lsa - Hash Table, tartiblangan ma'lumotlar uchun - BST.
Kerak bo'lganda xotirani tejash muhim. LinkedList ko'proq xotira ishlatadi. Agar o'lcham ma'lum bo'lsa, Array yaxshiroq.
Kod yozishdan oldin Big O murakkabligini hisoblab ko'ring. Loop ichida loop bo'lsa - O(n²), bu ko'pincha muammo belgisidir.
Real tezlikni o'lchash uchun profiling toollaridan foydalaning. Nazariy murakkablik va amaliy natijalar farq qilishi mumkin.
Tezlik va xotira o'rtasida balans toping. Ba'zan ko'proq xotira ishlatish tezlikni oshiradi (masalan, caching).
"Premature optimization is the root of all evil" - avval to'g'ri ishlaydigan kod yozing, keyin kerak bo'lsa optimizatsiya qiling.