Когда дело доходит до разработки алгоритмов, часто используются следующие методы:
- Динамическое программирование
- Жадная стратегия
- Разделяй и властвуй
Хотя для первых двух методов существуют хорошо известные теоретические основы, а именно принцип оптимальности Беллмана и теория матроидов (соответственно, жадных), я не смог найти такой общей основы для алгоритмов, основанных на УиК.
Во-первых, мне известно о том, что мы (или, скорее, профессор) представили в классе функционального программирования, называемом «алгоритмический скелет», который возник в контексте комбинаторов. В качестве примера мы дали такой скелет для алгоритмов D & C:
Определение : Пусть - непустые множества. Мы называем элементы S- решений , а элементы P : = P ( A ) (то есть подмножества A ) называются задачами . Тогда D & C-скелет представляет собой 4-кортеж ( P β , β , D , C ) , где:
- является предикатом для множества задач, и мы говорим, что задача p являетсяосновной,если P β ( p ) имеет место.
- является отображением P β → S, которое присваивает решение каждой основной задаче.
- является отображением P → P ( P ), которое делит каждую задачу на множество подзадач.
- является отображением P × P ( S ) → S, которое объединяет решения (в зависимости от вида «задачи поворота») подзадач для получения решения.
Тогда для заданного скелета и задачи p следующая общая функция f s : P → S вычисляет решение (в формальном смысле) для p :
где во второй строке мы используем обозначение для подмножеств X кодомена отображения f .
Тем не менее, мы не стали дополнительно изучать лежащие в основе «структурные» свойства проблем, которые могут быть сформулированы таким образом (как я уже говорил, это был класс функционального программирования, и это был лишь небольшой пример). К сожалению, я не смог найти дальнейшую ссылку на этот самый подход. Следовательно, я не думаю, что приведенные выше определения являются достаточно стандартными. Если кто-то признает то, что я изложил выше, я был бы рад статьям.
Во-вторых, для жадной стратегии мы получаем известный результат, что задача корректно решается общим жадным алгоритмом тогда и только тогда, когда его решения составляют взвешенный матроид. Существуют ли похожие результаты для алгоритмов D & C (необязательно основанных на методе, описанной выше)?