Що стосується проектування алгоритмів, часто використовують такі методи:
- Динамічне програмування
- Жадібна стратегія
- Розділяй і володарюй
Хоча для перших двох методів є відомі теоретичні основи, а саме принцип принципу оптимізму Беллмана та теорія матроїдів (відповідно гредоїд), я не зміг знайти такої загальної основи для алгоритмів на основі науково-дослідної роботи.
По-перше, мені відомо про те, що ми (а точніше, професор) запровадили у класі функціонального програмування, який називали "алгоритмічним скелетом", що виникло в контексті комбінаторів. Як приклад цього, ми навели такий каркас для алгоритмів наукових досліджень:
Визначення : Нехай - непусті множини. Ми називаємо елементи розв’язків , а елементи (тобто підмножини ) називаються проблемами . Тоді скелет D&C - це чотирикратний , де:S P : = P ( A ) A ( P β , β , D , C )
- - це предикат над безліччю проблем, і ми говоримо, що проблема є базовою, якщо виконується .
- - відображення яке призначає рішення кожної основної проблеми.
- - відображення яке ділить кожну проблему на набір підпрограм.
- - це відображення яке приєднується до рішень (залежно від виду "задачі") підпрограм для отримання рішення.
Тоді для заданого скелета та задачі наступна загальна функція обчислює рішення (у формальній сенс) для :p f s : P → S
де у другому рядку ми використовуємо позначення для підмножини кодомейна відображення .
Однак ми далі не досліджували основні, "структурні" властивості проблем, які можна сформулювати таким чином (як я вже сказав, це був клас функціонального програмування, і це був лише невеликий приклад). На жаль, я не зміг знайти подальшого посилання на цей самий підхід. Отже, я не вважаю, що наведені вище визначення є досить стандартними. Якщо хтось визнає те, про що я говорив вище, я був би радий з приводу відповідних статей.
По-друге, для жадної стратегії ми маємо відомий результат, що проблема правильно вирішується загальним жадібним алгоритмом тоді і лише тоді, коли її рішення складають зважений матроїд. Чи є подібні результати для алгоритмів D & C (не обов'язково засновані на методі, описаному вище)?