Bo'lib tashla va hukmronlik qil algoritmi
Bo'lib tashla va hukmronlik qil (Divide and Conquer) algoritmi — bu katta muammoni quyidagi tartibda hal qilish strategiyasidir:
Bo'lib tashla va hukmronlik qil algoritmidan foydalanish uchun rekursiya (recursion) ishlatiladi.
Bu quyidagi qadamlarni o'z ichiga oladi:
Keling, ushbu tushunchani bitta misol orqali tushunib olaylik. Bu yerda biz massivni bo'lib tashla va hukmronlik qil yondashuvi yordamida saralaymiz (ya'ni Merge Sort).


Yana, yakka elementlar hosil bo'lguniga qadar har bir qismni rekursiv ravishda ikkiga bo'lishda davom etamiz:


Bo'lib tashla va hukmronlik qil algoritmining murakkabligi Master teoremasi yordamida hisoblanadi.
T(n) = aT(n/b) + f(n)
Bu yerda:
Rekursiv muammoning vaqt murakkabligini topish uchun bitta misol ko'raylik. Merge sort uchun tenglama quyidagicha yozilishi mumkin:
T(n) = aT(n/b) + f(n)
= 2T(n/2) + O(n)
Bu yerda:
Endi:
T(n) = 2T(n log n) + O(n)
≈ O(n log n)
Bo'lib tashla va hukmronlik qil yondashuvi muammoni kichikroq quyi muammolarga ajratadi; bu quyi muammolar keyinchalik rekursiv ravishda yechiladi. Har bir quyi muammoning natijasi kelajakda foydalanish uchun xotirada saqlanmaydi. Dinamik yondashuvda esa har bir quyi muammoning natijasi kelajakda foydalanish uchun saqlab boriladi.
Bir xil quyi muammo bir necha marta qayta yechilmaydigan holatlarda bo'lib tashla va hukmronlik qil yondashuvidan foydalaning. Quyi muammoning natijasi kelajakda ko'p marta ishlatiladigan holatlarda esa dinamik yondashuvdan foydalaning.
Keling, buni bitta misol orqali tushunib olaylik. Faraz qilaylik, biz Fibonachchi ketma-ketligini topmoqchimiz. Unda:
Divide and Conquer yondashuvi:
fib(n)
agar n < 2 bo'lsa, 1 qaytarish
aks holda, f(n - 1) + f(n - 2) qaytarish
Dinamik yondashuv:
mem = []
fib(n)
agar n mem ichida mavjud bo'lsa: mem[n] ni qaytarish
aks holda:
agar n < 2 bo'lsa, f = 1
aks holda, f = f(n - 1) + f(n - 2)
mem[n] = f
f ni qaytarish
Dinamik yondashuvda mem har bir quyi muammoning natijasini saqlaydi.