Стратегія «розділяй та володарюй»

Розділ: Алгоритми та обчислювальна складність

📌 Про що ця тема


Стратегія «розділяй та володарюй» (divide and conquer) — це підхід до побудови алгоритмів, коли задачу розбивають на кілька менших підзадач того самого типу, розвʼязують їх, а потім обʼєднують результати. На іспиті перевіряють розуміння самої ідеї, вміння впізнати її в класичних алгоритмах (бінарний пошук, швидке та злиттєве сортування) й оцінити складність таких алгоритмів.


📖 Головне


• Три кроки стратегії: Розділяй (поділити задачу на підзадачі), Володарюй (розвʼязати підзадачі, зазвичай рекурсивно), Обʼєднуй (скласти з часткових розвʼязків загальну відповідь).


• Базовий випадок — настільки мала підзадача, що її розвʼязують напряму, без подальшого поділу. Без нього рекурсія не зупиниться.


• Рекурсія — природний інструмент реалізації: функція викликає сама себе для менших частин.


• Бінарний пошук: у впорядкованому масиві щоразу беремо середину й відкидаємо половину. Складність O(log n).


• Сортування злиттям (merge sort): масив ділять навпіл, кожну половину сортують рекурсивно, потім зливають. Складність O(n·log n), стабільне.


• Швидке сортування (quick sort): обирають опорний елемент (pivot), розбивають масив на менші й більші за нього, рекурсивно сортують частини. У середньому O(n·log n), у гіршому O(n²).


• Перевага підходу — зменшення складності порівняно з «наївним» перебором (напр. O(log n) замість O(n) при пошуку).


• Загальна оцінка: якщо задачу ділять на частини й на кожному рівні роблять O(n) роботи, а рівнів log n, разом виходить O(n·log n).


🔢 Як це працює на прикладі


Бінарний пошук числа 23 у масиві [2, 5, 8, 12, 16, 23, 38, 56, 72]:

• Крок 1: середина — елемент з індексом 4 (значення 16). 23 > 16 → шукаємо у правій половині [23, 38, 56, 72].

• Крок 2: середина правої частини — 56 (або 38 залежно від округлення). 23 < 56 → ліва підчастина [23, 38].

• Крок 3: середина — 23. Знайдено!

За 3 порівняння замість 9 при лінійному пошуку. Для n елементів потрібно приблизно log₂n кроків.


⚠️ Типові помилки


• Плутають «розділяй та володарюй» з динамічним програмуванням: у динамічному підзадачі перекриваються й результати зберігають, тут — зазвичай незалежні.

• Забувають про базовий випадок — рекурсія стає нескінченною.

• Вважають, що бінарний пошук працює на будь-якому масиві; він вимагає ВПОРЯДКОВАНОГО масиву.

• Плутають складність merge sort і quick sort у гіршому випадку: merge завжди O(n·log n), quick може деградувати до O(n²).

• Думають, що поділ сам по собі прискорює; виграш дає саме відкидання/незалежна обробка частин.


🎯 Що завчити напамʼять


• Три кроки: розділяй → володарюй → обʼєднуй.

• Бінарний пошук — O(log n), потрібен відсортований масив.

• Merge sort — O(n·log n) завжди.

• Quick sort — O(n·log n) у середньому, O(n²) у гіршому.

• Обовʼязкова наявність базового випадку рекурсії.


🧠 Перевір себе


1. Які три кроки лежать в основі стратегії «розділяй та володарюй»?

2. Яка умова обовʼязкова для роботи бінарного пошуку?

3. Чому merge sort надійніший за quick sort за складністю в гіршому випадку?

4. Що станеться з рекурсивним алгоритмом без базового випадку?


Відповіді: 1 — розділяй (поділ на підзадачі), володарюй (розвʼязання, часто рекурсивно), обʼєднуй (складання результату); 2 — масив має бути впорядкованим; 3 — merge sort завжди дає O(n·log n), а quick sort у гіршому випадку деградує до O(n²); 4 — рекурсія не зупиниться (нескінченний виклик, переповнення стека).

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.