Проблема визначення того, чи має програма "ефективність оптимальності" A чи "ефективність оптимальності" B, практично для будь-якого визначення поняття "ефективність оптимальності" взагалі не вирішується (доказ нижче). Це означає, що не існує єдиного методу, який завжди може підказати вам, наскільки оптимальним є алгоритм.
Однак існують методи, які часто застосовуються при аналізі алгоритмів наближення. Часто алгоритми наближення оцінюються за їх гарантіями щодо того, наскільки його рішення знаходиться від оптимального рішення. Я наведу приклад задачі та наближення, яку я доведе, використовуючи метод "нижньої межі", який є дуже часто використовуваним методом для доведення співвідношень.
Проблема, про яку йдеться, - проблема "завантаження вантажівки": у нас є багато однакових вантажівок (стільки, скільки нам подобається), кожна з яких здатна перевезти вантаж вагою не більше Т. У нас є п об'єктів, яких ми хочемо завантажити в ці вантажівки. транспорт. Кожен об'єкт i має вагу w_i, де w_i <= T (тому немає предметів, які не можуть поміститися на вантажівці навіть самі). Елементи не можна розділити на частини. Ми хотіли б заправити вантажівки, щоб нам було потрібно якомога менше вантажівок. Ця проблема неповна.
Для цієї проблеми існує дуже простий алгоритм наближення. Ми просто починаємо завантажувати вантажівку з предметами, поки вантажівка не буде настільки заповнена, що наступний товар не поміститься. Потім ми беремо іншу вантажівку і завантажуємо цю вантажівку тим предметом, який не вміщувався на попередній вантажівці. Ми не завантажуємо більше предметів на цю вантажівку: замість цього ми беремо нову вантажівку, знову наповнюємо її великою кількістю предметів, поки вона більше не поміщається, знову кладемо останній предмет на свою вантажівку тощо.
Цей алгоритм є так званим 2-наближенням для проблеми: він використовує щонайменше вдвічі більше вантажівок, ніж знадобиться оптимальне рішення. "Максимум" є вирішальним: ми можемо пощастить і знайдемо оптимальне рішення, але, принаймні, ми не зробимо занадто поганого.
Щоб довести це, спочатку визначимо нижню межу оптимальної кількості вантажних автомобілів, які нам потрібні. Для цього уявіть, що нам дозволяється різати предмети на частини: ми могли б легко легко заповнити кожну вантажівку, але останню. Кількість вантажівок, які нам знадобляться, якщо ми це зробили, це нижня межа кількості вантажних автомобілів, які нам потрібні для оригінального питання: в найкращому випадку оптимальне рішення завжди повністю заповнює кожну вантажівку, і в цьому випадку кількість вантажівок дорівнює, але якщо оптимальні рішення залишають вантажні автомобілі незаповненими, то їм може знадобитися лише більше вантажівок.
Тепер ми розглянемо наш алгоритм наближення. Зауважте, що на кожному кроці ми (частково) заповнюємо дві вантажівки. Також зауважте, що, як працює алгоритм, предмети у першій вантажівці та товар у другій вантажівці разом не можуть вміститися у перший вантажівка, тому їх сума становить щонайменше Т. Це означає, що на кожному кроці ми завантажуємо щонайменше повне вантажівка варті предмети на двох вантажівках. Тепер порівняйте це з нашою нижньою межею: у цьому випадку ми завантажуємо повну вантажівку вартістю предметів на одну вантажівку. Іншими словами, наш алгоритм наближення обчислює (за лінійним часом) рішення, яке дуже схоже на наше нижнє обмеження 'рішення', але використовує дві вантажівки замість одного. Отже, ми використовуємо щонайменше вдвічі більше вантажівок, ніж оптимальний алгоритм, оскільки ми використовуємо щонайменше вдвічі більше вантажівок, ніж нижня межа оптимального алгоритму.
Цей алгоритм дає наближення до постійного коефіцієнта: він є щонайбільше в 2 рази гіршим, ніж оптимальне рішення. Деякі приклади інших заходів: щонайбільше C оптимального рішення (помилка адиції, досить нечасто), щонайбільше c log n разів настільки ж погано, як оптимальне рішення, максимум у cn разів так погано, як оптимальне рішення, максимум c 2 ^ (dn) разів настільки ж поганий, як оптимальне рішення (дуже поганий; наприклад, загальний TSP допускає лише алгоритми з таким видом гарантій).
Звичайно, якщо ви хочете бути впевненими, що підтверджений фактор є найкращим фактором, який ви можете довести, вам слід спробувати знайти випадки, коли рішення, яке дає ваш алгоритм, дійсно таке ж погане, як це можливо.
Також зауважте, що ми іноді використовуємо алгоритми наближення для проблем, які не є жорсткими.
Я дізнався це (серед набагато більше) на курсі алгоритмів наближення в моєму університеті.
Доказ нерозбірливості: нехай P - це проблема, а A і B - алгоритми наближення для P, де A і B не мають однакової «оптимальності» для певного розумного визначення поняття «оптимальність», і де час роботи A і B є омега (1) (суворо повільніше, ніж постійний час, тобто вони стають повільнішими для більших випадків) і там, де A і B завжди зупиняються.
Нехай D - програма, яка стверджує, що вона може обчислити наступне: враховуючи деяку програму C, що обчислює наближення для P, вирішуйте, чи вона настільки ж хороша, як A, або як B для досить великих входів (ви можете використовувати це для категоризації програм відповідно до їх оптимальності).
Тоді ми можемо використовувати D для вирішення проблеми зупинки. Нехай E - програма, а F - вхід для цієї програми. Ми будемо використовувати D, щоб вирішити, чи зупиниться E на вході F.
Ми розробляємо програму G, яка виконує наступні дії: задаючи вхід S для задачі P, вона працює E на F і A на S паралельно: вона виконує E деякий час, потім A, потім E знову і так далі. Якщо E зупиняється на F, він перестає виконувати A і замість цього запускає B на S та повертає результат B. Якщо A зупиняється перед тим, як E зупиняється, він повертає результат A.
Використовуючи D on G, тепер вирішує, чи зупиняється E на F: якщо E зупиняється на F, то для досить великих входів S, E зупиняється на F, перш ніж зупиняється на S (оскільки час, необхідний для зупинки E, не залежить від розміру вхід, на відміну від А). D повідомляє, що G має характеристики оптимальності B. Якщо E не зупиняється на F, D повідомляє, що G має характеристики оптимальності A.