Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Poyasnyuvalna_zapiska (1).docx
Скачиваний:
1
Добавлен:
04.09.2019
Размер:
414.35 Кб
Скачать

Алгоритм гілок і границь [1]

Першим кроком є обов’язково розбиття початкової множини допустимих розв’язків на підмножини так, щоб потім для кожної підмножини визначити оцінку найліпшого можливого результату або знайти точно найліпший для цієї підмножини розв’язок . Якщо для якоїсь -ї підмножини вдалося знайти точний розв’язок, визначаємо міру його оптимальності функцією . Якщо таких розв’язків кілька, вибираємо(тимчасово) той з них, що має найліпшу . Усі множини, що мають оцінку , гіршу за тимчасову , відкидають з подальшого розгляду.

Наступні кроки повторюють доти, доки є не відкинуті підмножини з незнайденими на них точними найліпшими розв’язками. Кожен з кроків полягає у наступному.

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

Розв’язком буде останнє знайдене значення , після досягнення умови припинення пошуку( тобто знайдуть точні найліпші розв’язки на всіх невідкинутих підмножинах)

Зображення даних в оперативній пам’яті [2]

Розв’язання задачі методом гілок та границь можна представити в оперативній пам’яті комп’ютера у вигляді дерева пошуку. Корінь дерева (0 рівень) є початкова множина . Його сини являються множинами кандидатів для вибору , і , в загальному випадку, вузли -того рівня являються кандидатами на вибір при умові, що вибрали так, як вказують предки цих вузлів. Шукаючи розв’язки, ми хочемо одержати всі такі вузли, відкидаючи з подальшого розгляду вузли множин з гіршою оцінкою.

Інколи немає необхідності зберігати все дерево. В цих випадках можна обійтися масивом, або чергою, тільки для зберігання поточного часткового розв’язку.

Опис алгоритму програмного модуля [2]

Розв’язання задачі можливо продемонструвати за допомогою рекурсивної схеми реалізації алгоритму:

void Bound (< вектор , >) // - розмірність вектора

{

< Знайти частковий розв’язок>

< Розбити множину по ньому >;

<Заповнити ліве піддерево >;

<Заповнити праве піддерево >;

<Оцінити нижні границі піддерев >;

if(<якщо границя лівого піддерева менша мінімальної оцінки> )

{

Bound(<ліве піддерево>); // запустити гілкування лівого дерева

}

if(<якщо границя правого піддерева менша мінімальної оцінки> )

{

Bound(<праве піддерево>); // запустити гілкування правого дерева

}

}

При виконанні даної функції будуть знайдені всі оптимальні розв’язки задачі.

Оцінка складності алгоритму

Оцінимо часову складність алгоритму. Дана схема реалізації методу гілок та границь дозволяє значно скоротити час розрахунків, але в часткових випадках може працювати як повний перебір, часова складність якого дорівнює

Метод решета [2]

Метод решета є одним з небагатьох загальних методів, що дозволяють вирішувати різноманітні завдання теорії чисел . Найдавніший з відомих методів решета належить Ератосфену. Цей метод пошуку отримав назву "Решето Ератосфена", на честь давньогрецького математика Ератосфена Киренського. А "решето" тому, що ми як би просіваємо масив чисел, залишаючи в ньому тільки прості числа.

Якщо потрібно знайти всі прості числа менші за певне число , виписуються всі числа від . Потім в цьому ряду викреслюються всі числа, які діляться на і так далі до . Числа, які залишилися невикресленими після цієї процедури – прості, тобто є кратними самому собі та одиниці.

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