Коли кажуть, що два алгоритми є "подібними"?


16

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

Коли можна сказати, що два задані алгоритми "схожі"?

Що я маю на увазі під "схожим"? Скажемо, що два алгоритми, як кажуть, схожі, якщо ви можете зробити будь-яку з наведених заявок у документі, не плутаючи / дратуючи будь-якого рецензента (краще визначення вітається):

1. "Алгоритм АA , аналогічний алгоритму B , також вирішує задачу X "

Заява 2. "Наш алгоритм схожий на алгоритм C "

Дозвольте зробити це трохи більш конкретним. Припустимо, ми працюємо з алгоритмами графіків. Спочатку кілька необхідних умов, щоб два алгоритми були подібними:

  1. Вони повинні вирішувати ту саму проблему.
  2. Вони повинні мати однакову інтуїтивну ідею високого рівня.

Наприклад, якщо говорити про обхід графів, обхід першої ширини та першої глибини, задовольняють вищезазначені дві умови; для обчислень з найкоротшими шляхами алгоритм Дейкстра задовольняє вищевказаним двом умовам (звичайно, для невагомих графіків); тощо.

Це також достатні умови? Більш конкретно, припустимо, що два алгоритми задовольняють необхідні умови для подібності. Чи справді ви б їх називали подібними

  1. вони мають різні асимптотичні показники?
  2. для спеціального класу графів, один алгоритм вимагає час , в той час як інша вимагає O ( п 1 / 3 )Ω(n)O(n1/3) час?
  3. у них різні умови закінчення? (Нагадаємо, вони вирішують ту саму проблему)
  4. крок попередньої обробки відрізняється в двох алгоритмах?
  5. складність пам'яті відрізняється в двох алгоритмах?

Редагувати: Питання, очевидно, дуже залежить від контексту та є суб'єктивним. Я сподівався, що вищезазначені п'ять умов дозволять отримати деякі пропозиції. Я радий додатково змінити питання та надати більше деталей, якщо це потрібно, щоб отримати відповідь. Спасибі!


1
це дійсно залежить від контексту. Наприклад, для певних послідовних алгоритмів DFS та BFS дуже різні, і це може навіть не працювати. У паралельних налаштуваннях DFS (або принаймні один варіант) є P-повним, тоді як BFS є "простим паралельним".
Суреш Венкат

@SureshVenkat - Я погоджуюся, що питання дуже залежить від контексту. В інтересах не починати дебатів, я утримався від прийняття назв "двох алгоритмів", ризикуючи
прозвучити

4
Проблема в тому, що є близько і є близько. Існує спосіб мислення мультиплікативного методу оновлення ваги як "по суті бінарного пошуку", але в неправильному контексті це буде звучати божевільно. FWIW, у всіх ваших випадках вище, я можу уявити, як оголосити два алгоритми різними.
Суреш Венкат

1
Це питання мені здається занадто суб'єктивним. Ви в основному просите визначення "подібного", коли не існує канонічного визначення.
Джо

1
Дещо пов’язане з цим: cstheory.stackexchange.com/questions/9409/…
Radu GRIGore

Відповіді:


23

Важкою проблемою є навіть узгоджене визначення поняття «Алгоритм А схожий на алгоритм В». Для одного, я не вважаю, що "вони повинні вирішити ту саму проблему" є необхідною умовою. Часто, коли в роботі говорять, що "алгоритм теореми 2 схожий з алгоритмом B в теоремі 1 ", алгоритм A насправді вирішує іншу задачу, ніж алгоритм BA2Б1АБ , але має деякі незначні модифікації для вирішення нової проблеми .

Навіть намагаючись визначити, що означає, щоб два алгоритми були однаковими, є цікавою і важкою проблемою. Дивіться статтю "Коли два алгоритми однакові?" http://research.microsoft.com/~gurevich/Opera/192.pdf


17

Частіше за все це означає "я не хочу детально виписувати алгоритм B, тому що всі цікаві деталі майже ідентичні тим, які в алгоритмі А, і я не хочу переходити обмеження на 10 сторінок" і все одно термін подання - три години ".


7

Якщо ви маєте на увазі "подібне" у розмовному значенні, я думаю, що відповідь Джеффа фіксує, що означають деякі люди.

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

Для порівняння алгоритмів першим кроком було б зробити поняття еквівалентності точним. Наочно, нехай простір алгоритмів і М були простір математичних об'єктів і сек х м : М функції кодування, з ї м ( Р ) сенс алгоритму P . Простір M може містити все, що варіюється від кількості змінних у вашому алгоритмі, до його діаграми стану або часової складності. Я не вірю , що є абсолютне поняття про те, що М може бути. Дано МАМсем:АМсем(П)ПМММоднак, можна сказати, два алгоритми еквівалентні, якщо дорівнює s e m ( Q )сем(П)сем(Q) . Дозвольте додати, що я думаю, що кожен із п’яти згаданих вами критеріїв може бути формалізований математично таким чином.

Якщо ми хочемо поговорити про алгоритм, який є більш загальним, ніж інший (або алгоритм, який уточнює інший), я б наділив більшою структурою. Уявіть, що ( M , ) - це частково впорядкований набір, і порядок x y кодує, що x є більш визначеним об'єктом, ніж y . Наприклад, якщо M містить набори слідів алгоритму і set встановлено включення, s e m ( P ) s e m ( Q ) означає, що кожен слід PМ(М,)хухуМсем(П)сем(Q)Пце слід . Ми можемо інтерпретувати це , як кажуть , що P є більш детермінованим , ніж Q .QПQ

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

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


5

По лінії відповіді Джеффа два алгоритми схожі, якщо автор одного з них очікує, що автор іншого може переглядати її документ.

Але жартуючи убік, у теоретичному співтоваристві я б сказав, що те, що алгоритм задачі A вирішує, є досить дотичним до того, чи є він "подібним" до алгоритму B, який може вирішити зовсім іншу проблему. A схожий на B, якщо він "працює" через ту саму основну теоретичну ідею. Наприклад, чи є основна ідея в обох алгоритмах те, що ви можете запроектувати дані в набагато менший розмірний простір, зберегти норми за допомогою лемми Джонсона-Лінденштраусса, а потім здійснити грубу силу? Тоді ваш алгоритм схожий на інші алгоритми, які роблять це, незалежно від того, яку проблему ви вирішуєте. Існує деяка невелика кількість алгоритмічних прийомів важкої експлуатації, які можна використовувати для вирішення найрізноманітніших проблем, і я думаю, що ці методи утворюють центроїди багатьох наборів "подібних" алгоритмів.


3

Дуже цікаве запитання, і дуже приємний папір Райан!

Я безумовно згоден з думкою, що оцінка оцінки загальної подібності між алгоритмами - це переважно суб'єктивне судження про цінність. Хоча з технічної точки зору є ряд особливостей, які ретельно спостерігаються, щоб вирішити подібність алгоритмів, врешті-решт, це також питання особистого смаку. Я спробую надати опис важливості обох сторін однієї монети, посилаючись на конкретні моменти вашого питання:

З технічної точки зору:

  1. Раян вже вказував, що обидва алгоритми повинні вирішити одну і ту ж проблему . Можна ще пізніше і узагальнити це поняття, сказавши, що зазвичай достатньо довести, що відбувається поліноміальне перетворення того самого екземпляра, яке недоступне алгоритмом А, щоб алгоритм В міг впоратися з ним. Однак це було б насправді дуже слабко. Я волію думати про подібність у більш сильному сенсі.
  2. Однак я б ніколи не очікував, що два еквівалентні алгоритми матимуть однакову інтуїтивну ідею --- хоча, знову ж таки, це визначення, яке нелегко засвоїти. Більше того, часто трапляється так, що алгоритми, які вважаються подібними, не дотримуються основної обґрунтування. Розглянемо для прикладу деякі алгоритми сортування, які, однак, виникли по-різному, слідуючи різним ідеям. В якості крайнього прикладу розглянемо генетичні алгоритми, які математичне співтовариство зазвичай розглядають як стохастичні процеси (і тому вони є рівнозначними на їх думку), які потім моделюються та аналізуються зовсім по-іншому.
  3. N(N2-1)Бази даних аддитивних шаблонів фактично розширюватимуть однакову кількість вузлів в абсолютно однаковому порядку, і це робить обидва алгоритми (та їх евристику) суворо еквівалентними в дуже сильному сенсі, тоді як перший підхід не має попередньої обробки, а другий має значні накладні витрати, перш ніж починати вирішувати певний екземпляр. Однак, як тільки ваші бази даних шаблонів розглядають більш симульовані взаємодії, між ними виникає величезний розрив у продуктивності, так що вони, безумовно, різні ідеї / алгоритми.
  4. Власне кажучи, я думаю, що більшість людей судять алгоритми за їх призначенням та роботою . Тому асимптотична ефективність є хорошою метрикою для міркування подібності між програмами. Однак майте на увазі, що ця продуктивність не обов'язково є типовим випадком, так що якщо два алгоритми мають однакову асимптотичну продуктивність, але поводяться по-різному на практиці, ви, мабуть, зробите висновок, що вони різні. Важливим доказом у цьому плані є те, що обидва алгоритми мають однакову продуктивність як за часом, так і за пам'яттю (а це, як сказав Суреш, змушує DFS та BFS виглядати по-різному). Якщо це твердження не здасться вам переконливим, зверніться до чудової (і дуже рекомендується книги): Програмування ВсесвітуСет Ллойд. На сторінці 189 він посилається на перелік із понад 30 мірами складності, які можна використовувати для розгляду алгоритмів як різних.

Отже, що робить алгоритми схожими / різними? На мій погляд (і це суто спекулятивно), головна відмінність полягає у тому, що вони пропонують вам. Багато, багато (багато!) Алгоритмів відрізняються лише кількома технічними характеристиками, коли вони служать одній і тій же цілі, так що типовий випадок відрізняється для різних діапазонів введення. Однак найбільшою з усіх відмінностей є (на мій погляд) те, що вони пропонують вам. Алгоритми мають різні можливості і тому власні сильні та слабкі сторони. Якщо два алгоритми виглядають як однакові, але можуть бути розширені різними способами, щоб впоратися з різними випадками, то я б зробив висновок, що вони різні. Однак часто два алгоритми виглядають приблизно однаково, щоб ви вважали їх однаковими ... поки хтось не приїде, зробивши ключове розрізнення і раптом, вони зовсім інші!

Вибачте, моя відповідь була врешті-решт ...

Ура,


1
На насправді, Райан припустив , що це НЕ необхідно , щоб обидва алгоритму для вирішення тієї ж завдання.
Jeffε

Правда! Я тільки збирав свою думку з цього приводу, але ви точно маєте рацію!
Карлос Лінарес Лопес

2

Будь-яка згадка про подібність без визначення метрики подібності недостатньо чітко визначена. Існує багато способів, за якими два алгоритми можуть бути схожими:

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

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

Ось кілька критеріїв, за якими два алгоритми можна назвати подібними:

  1. Типи вводу / виводу
  2. Алгоритмічна / складність пам’яті
  3. Припущення про типи входів (наприклад, тільки додатні числа або стабільність з плаваючою комою)
  4. Вкладені зв’язки (наприклад, деякі алгоритми - це особливі випадки інших)

Критичне рішення про значення подібності залишається. Іноді ти дбаєш про складність алгоритму, іноді - ні. Оскільки визначення подібності залежить від контексту обговорення, термін "аналогічний алгоритм" недостатньо визначений.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.