Big O Notation

Big O notation algoritmning eng yomon holatdagi (worst-case) vaqt yoki xotira murakkabligini ifodalaydi.

O(1)

Constant

Doimiy vaqt - Eng yaxshi

Array element kirish
O(log n)

Logarithmic

Logaritmik vaqt - Juda yaxshi

Binary Search
O(n)

Linear

Chiziqli vaqt - Normal

Linear Search
O(n log n)

Linearithmic

N-logaritmik - Qoniqarli

Merge Sort, Quick Sort
O(n²)

Quadratic

Kvadratik - Sekin

Bubble Sort
O(2ⁿ)

Exponential

Eksponensial - Juda sekin

Rekursiv Fibonacci

Big O Murakkablik Grafigi

Operatsiyalar Murakkabligi

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

Tartiblash Algoritmlari

Tartiblash Algoritmlarini Taqqoslash

Bubble Sort

Best: O(n)
Average: O(n²)
Worst: O(n²)
Space: O(1)

Oddiy, lekin sekin. Faqat kichik massivlar uchun.

Quick Sort

Best: O(n log n)
Average: O(n log n)
Worst: O(n²)
Space: O(log n)

Amalda eng tez. Ko'p qo'llaniladi.

Merge Sort

Best: O(n log n)
Average: O(n log n)
Worst: O(n log n)
Space: O(n)

Barqaror. Katta ma'lumotlar uchun yaxshi.

Heap Sort

Best: O(n log n)
Average: O(n log n)
Worst: O(n log n)
Space: O(1)

In-place. Kam xotira ishlatadi.

Qidiruv Algoritmlari

Linear Search

O(n)

Afzalliklari:

  • Oddiy implementatsiya
  • Tartiblangan massiv kerak emas
  • Kichik ma'lumotlar uchun yaxshi

Kamchiliklari:

  • Sekin (katta ma'lumotlarda)
  • Barcha elementlarni tekshirishi mumkin

Binary Search

O(log n)

Afzalliklari:

  • Juda tez
  • Katta ma'lumotlar uchun ideal
  • Samarali

Kamchiliklari:

  • Tartiblangan massiv kerak
  • Murakkabrok implementatsiya

Hash Table Search

O(1)

Afzalliklari:

  • Eng tez (average case)
  • Doimiy vaqt
  • Key-value juftliklari

Kamchiliklari:

  • Ko'proq xotira
  • Collision handling kerak

Optimizatsiya Maslahatlari

To'g'ri Tuzilmani Tanlang

Qaysi operatsiyalar ko'proq bajarilishini o'ylab, shunga mos tuzilmani tanlang. Masalan, ko'p qidiruv bo'lsa - Hash Table, tartiblangan ma'lumotlar uchun - BST.

Xotirani Tejang

Kerak bo'lganda xotirani tejash muhim. LinkedList ko'proq xotira ishlatadi. Agar o'lcham ma'lum bo'lsa, Array yaxshiroq.

Murakkablikni Tahlil Qiling

Kod yozishdan oldin Big O murakkabligini hisoblab ko'ring. Loop ichida loop bo'lsa - O(n²), bu ko'pincha muammo belgisidir.

Profiling Qiling

Real tezlikni o'lchash uchun profiling toollaridan foydalaning. Nazariy murakkablik va amaliy natijalar farq qilishi mumkin.

Trade-offlarni Tushuning

Tezlik va xotira o'rtasida balans toping. Ba'zan ko'proq xotira ishlatish tezlikni oshiradi (masalan, caching).

Premature Optimization

"Premature optimization is the root of all evil" - avval to'g'ri ishlaydigan kod yozing, keyin kerak bo'lsa optimizatsiya qiling.