Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dprotsenko_NIRS.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
218 Кб
Скачать
☆

2. Методи розв’язання

2.1 Класифікація методів

На практиці дуже часто виникають NP- повні задачі, і задача про рюкзак – одна з них. Звичайно надій на те, що для них знайдеться поліноміальний алгоритм практично немає, але з цього не випливає, що з цією задачею не можна нічого зробити. По перше, дуже часто вдається побудувати поліноміальний алгоритм для NP- повної задачі. Звичайно, він дасть наближене, а не точне рішення, але працюватиме за реальний час. По-друге, дані можуть бути такі, що експоненціальний алгоритм, наприклад перебірний зможе працювати на них пристойний час.

До точних методів належать: повний перебір, метод гілок і меж, динамічне програмування. До наближених відносять жадібні алгоритми. Повний перебір – перебір всіх варіантів (всіх станів) – малоефективний, але точний метод. Метод гілок і меж – по суті скорочення повного перебору з відсіканням завідомо "поганих" рішень. Алгоритм динамічного програмування заснований на принципі оптимальності Беллмана. Жадібний алгоритм заснований на знаходженні хорошого і «дешевого» рішення.

2.2 Динамічне програмування

В основі методу динамічного програмування лежить принцип оптимальності Беллмана: «Який би не був стан системи перед черговим кроком, треба вибирати управління на цьому кроці так, щоб виграш на цьому кроці плюс оптимальний виграш на всіх наступних кроках був оптимальним». Простіше кажучи оптимальне рішення на i кроці знаходиться виходячи зі знайдених раніше оптимальних рішень на попередніх кроках. З цього випливає , що для того щоб знайти оптимальне рішення на останньому кроці треба спочатку знайти оптимальне рішення для першого, потім для другого і так далі поки не пройдемо всі кроки до останнього.

2.3 Повний перебір

Назва методу говорить сама за себе. Щоб отримати рішення, потрібно перебрати всі можливі варіанти завантаження. Тут ми будемо розглядати таку постановку завдання: у рюкзак завантажуються предмети N різних типів, кожен предмет типу і має вагу і вартість , . Потрібно визначити максимальну вартість вантажу, вага якого не перевищує W. Очевидна проста рекурсивна реалізація. Часова складність даного алгоритму дорівнює O (N!). Алгоритм має складність факторіал і може працювати лише з невеликими значеннями N. З ростом N, число варіантів дуже швидко зростає, і завдання стає практично нерозв'язним методом повного перебору. На рис 2.1 показано дерево перебору. Дерево має 4 рівня. У кожному кружечку показана вага предмета, корінь дерева - нульову вагу, тобто ситуацію, коли рюкзак порожній. Перший предмет можна вибрати чотирма способами , другий - трьома , треті - двома, а далі можемо взяти тільки один залишився предмет

Рис. 2.1 – Дерево перебору

2.4 Метод гілок і меж

Фактично даний метод – це варіація повного перебору, з виключенням свідомо не оптимальних рішень. Для повного перебору можна побудувати дерево рішень. Якщо у нас є якесь оптимальне рішення P, тоді ми намагаємося покращити його, але якщо на розглянутій в поточний момент гілці рішення свідомо гірше, ніж P, то слід зупинити пошук і вибрати іншу гілку для розгляду. Наприклад , на рис 2.1 є обмеження на вагу рюкзака . Тоді використовуючи метод гілок і меж можна скоротити дерево перебору до такого , рис 2.2. Видно відразу , що кількість варіантів для перебору зменшилася відразу. А саме залишилося 8 варіантів результату , замість 24 раніше. Але не завжди виходить відсіяти досить багато варіантів щоб швидкість роботи була помітно збільшена , завжди можна підібрати такі вхідні дані , для яких метод гілок і меж дасть оцінку за часом ідентичну повного перебору

Рис. 2.2 – Дерево перебору з обмеженням на вагу рюкзаку

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]