Если я правильно понимаю, алгоритм, который вычисляет значение действительной функции имеет вычислительную сложность если выполняется следующее: Когда мы вычисляем с точностью требуется порядка шагов ,
Однако что если у нас есть алгоритм, который сначала «находит более эффективный алгоритм для вычисления », а затем вычисляет ?
Другими словами, что если у нас есть алгоритм который выполняет следующее:
Найти эффективный алгоритм для вычисления .
используйте для вычисления .
Не в этом случае, мы больше не можем говорить о вычислительном времени, которое потребуется для вычисления , например, потому что она полностью зависит от того , алгоритм уже найден алгоритм . Другими словами, время вычислений, необходимое для вычисления если является первым составным числом, намного больше, чем время вычислений, необходимое для вычисления после того, как уже вычислено.
Мой вопрос заключается в том, существует ли концепция / теория об этом типе алгоритма, который сначала находит другой алгоритм перед вычислением функции? В частности, меня интересует анализ вычислительной сложности таких алгоритмов.
источник
Ответы:
Существует хорошо известный алгоритм, универсальный алгоритм поиска Левина, режим работы которого идентичен. Рассмотрим, например, проблему поиска удовлетворительного присваивания для формулы, которая гарантированно выполнима. Универсальный поиск Левина запускает все потенциальные алгоритмы параллельно, и, если какой-либо алгоритм выводит удовлетворительное назначение, останавливает и выводит это назначение. Если оптимальный алгоритм для задачи выполняется за время , то алгоритм Левина работает за время O ( f ( n ) ) (возможно с огромной постоянной), если он реализован правильно.f(n) O(f(n))
Хотя алгоритм Левина непрактичен (из-за огромных констант), теоретически он очень интересен. См. Статью Scholarpedia для получения дополнительной информации об универсальном поиске.
источник
Предположим, у нас есть функция,
f
которая принимает аргументx
типаA
и выводит другую функцию, которая принимает аргументy
типаB
и возвращает результат типаC
. По вашим словам,f
принимает аргументx
и возвращает «алгоритм», который принимает входные данные типаB
и выводит результаты типаC
.Функция
f
имеет типДействительно, он принимает
x : A
и возвращает функцию типаB → C
. Но такойf
эквивалент эквивалентен функции,g : A × B → C
которая принимает обаx
иy
сразу и дает вам конечный результат. Действительно, между типами существует изоморфизми
потому что мы можем определить
g
с точки зренияf
каки мы можем определить
f
с точки зренияg
какОперация перехода от
g
кf
называется каррингом, и функциональные программисты используют ее постоянно. В теории вычислимости идея взять один вход и вывести функцию (алгоритм) воплощена в теореме smn .Ответ на ваш вопрос: «Да, люди делают это постоянно». Но есть и мораль: алгоритм, который находит алгоритм, - это всего лишь алгоритм.
источник