Теоретичні основи розділення та перемоги


22

Що стосується проектування алгоритмів, часто використовують такі методи:

  • Динамічне програмування
  • Жадібна стратегія
  • Розділяй і володарюй

Хоча для перших двох методів є відомі теоретичні основи, а саме принцип принципу оптимізму Беллмана та теорія матроїдів (відповідно гредоїд), я не зміг знайти такої загальної основи для алгоритмів на основі науково-дослідної роботи.

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

Визначення : Нехай - непусті множини. Ми називаємо елементи розв’язків , а елементи (тобто підмножини ) називаються проблемами . Тоді скелет D&C - це чотирикратний , де:S P : = P ( A ) A ( P β , β , D , C )A,SS P:=P(A)A(Pβ,β,D,C)

  • Pβ - це предикат над безліччю проблем, і ми говоримо, що проблема є базовою, якщо виконується .pPβ(p)
  • β - відображення яке призначає рішення кожної основної проблеми.PβS
  • D - відображення яке ділить кожну проблему на набір підпрограм.PP(P)
  • C - це відображення яке приєднується до рішень (залежно від виду "задачі") підпрограм для отримання рішення.P×P(S)S

Тоді для заданого скелета та задачі наступна загальна функція обчислює рішення (у формальній сенс) для :p f s : P Ss=(Pβ,β,D,C)pfs:PSp

fs(p)={β(p)if p is basicC(p,f(D(p)))otherwise

де у другому рядку ми використовуємо позначення для підмножини кодомейна відображення .f(X):={f(x):xX}Xf

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

По-друге, для жадної стратегії ми маємо відомий результат, що проблема правильно вирішується загальним жадібним алгоритмом тоді і лише тоді, коли її рішення складають зважений матроїд. Чи є подібні результати для алгоритмів D & C (не обов'язково засновані на методі, описаному вище)?

Відповіді:


5

Офіційне звернення (дещо нагадує модель, запропоновану у питанні) суб'єкта із використанням того, що називається псевдоморфізмом (тобто функціями, які є майже морфізмами, з деякими попередніми та післярахунковими обчисленнями), а також міркуваннями складності аналіз та паралельна реалізація таких алгоритмів наведені в:

Алгебраїчна модель поділу і перемоги та її паралелізму Чжіцзін Г. Муу та Пол Худак (у «Журналі суперкомп'ютерів» , том 2, випуск 3, стор. 257-278, листопад 1988 р.)


1

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

Візьмемо приклад злиття. Почнемо з введення, масиву з елементів. Рекурсивно можна визначити структуру масиву наступним чином:n

  • Для масив порожній.n=0
  • Для масив є однотонним елементомn=1
  • Для масив - це об'єднання масиву розміру ( зліва ) та розміру ( право )n>1n2n2

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

Важливо зауважити, що це не обов'язково призводить до того, що ви очікуєте від алгоритмів D&C. Ми могли б визначити структуру масиву наступним чином:

  • Для масив порожній.n=0
  • Для масив - це єдиний елемент, об'єднаний у масив розміром . n - 1n>0n1

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

Тепер існує основна теорема для аналізу алгоритмів D&C, і це проливає деяке світло на очікування ефективності для підкомпонентів алгоритму D&C з конкретною загальною ефективністю роботи.


Приклади, які ви наводите, вписуються в загальний контекст, який я навожу в своєму запитанні (і насправді, може бути корисним, щоб ви подали конкретну заяву). Однак моє запитання полягало в тому, чи існує критерій (наприклад, BOP або структура матроїдів), щоб проблеми вирішувались алгоритмами, які вписуються в цю модель.
Марка Корнелія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.