Чи існує концепція алгоритму, що обчислює функцію, спочатку знайшовши інший алгоритм?


14

Якщо я правильно це зрозумів, алгоритм, який обчислює значення реальної функції має обчислювальну складність якщо це справедливо: Коли ми обчислюємо для точності потрібно в порядку кроків .fO(g(n))fδg(n)

Однак що робити, якщо у нас є алгоритм, який спочатку «знаходить більш ефективний алгоритм для обчислення », а потім обчислює ?ff

Іншими словами, що робити, якщо у нас є алгоритм який робить наступне:A

  1. Знайдіть ефективний алгоритм для обчислення .Bf

  2. використовувати для обчислення .Bf

Чи не в цьому випадку, ми більше не можемо говорити про обчислювальному часу, який буде потрібно для обчислення , наприклад, тому що вона повністю залежить від того , алгоритм уже знайдений алгоритм . Іншими словами, час обчислення, необхідний для обчислення якщо є першим обчисленим числом, набагато більше, ніж час обчислення, необхідний для обчислення після того, як вже обчислено.f(5)ABf(5)5f(5)f(3)

Моє запитання: чи існує концепція / теорія щодо такого роду алгоритму, яка вперше знаходить інший алгоритм перед обчисленням функції? Конкретно мені цікаво проаналізувати складність обчислювальної роботи таких алгоритмів.


1
Ви б сказали, що Mathematica в основному робить те, що ви просите? Ви даєте йому рівняння для розв’язання, і він автоматично визначає, який алгоритм використовувати для розв’язання цих рівнянь, а потім вирішує їх.
користувач541686

Перевірте itu.dk/people/sestoft/pebook , це актуально.
Натан Рінго

Відповіді:


18

Існує відомий алгоритм, універсальний алгоритм пошуку Левіна, режим роботи якого ідентичний. Розглянемо, наприклад, проблему пошуку задовольняючої задачі для формули, яка гарантовано відповідає. Універсальний пошук Левіна виконує паралельно всі потенційні алгоритми, і якщо будь-який алгоритм видає задовольняюче завдання, зупиняє та видає це завдання. Якщо оптимальний алгоритм задачі працює в часі , тоді алгоритм Левіна працює у часі (з можливою величезною постійною), якщо його правильно реалізувати.f(n)O(f(n))

Хоча алгоритм Левіна непрактичний (через величезні постійні), він теоретично дуже цікавий. Докладнішу інформацію про універсальний пошук див. У статті Scholarpedia .


10

Припустимо, у нас є функція, fяка приймає аргумент xтипу A, і виводить іншу функцію, яка приймає аргумент yтипу Bі повертає результат типу C. Вашими словами, fбере аргумент xі повертає "алгоритм", який приймає вводи типу Bі виводить результати типу C.

Функція fмає тип

A → (B → C)

Дійсно, вона бере x : Aі повертає функцію типу B → C. Але такий fеквівалентна функції , g : A × B → Cяка приймає як x і yна один раз і дає вам остаточний результат. Дійсно, між типами існує ізоморфізм

A → (B → C)

і

A × B → C

тому що ми можемо визначити gв термінах fяк

g(x, y) := f(x)(y)

і ми можемо визначити fв термінах gяк

f(x) := (y ↦ g(x,y))

Операцію переходу з gдо fназивають currying і функціональні програмісти використовують її весь час. У теорії обчислюваності ідея прийому одного вводу та виведення функції (алгоритму) втілена в теоремі smn .

Відповідь на ваше запитання - «так, люди роблять це постійно». Але є й мораль: алгоритм, який знаходить алгоритм, все ще є лише алгоритмом.


1
+1 для цього останнього речення. Добре сказано.
Джон Коулман

"алгоритм, який знаходить алгоритм, все ще є лише алгоритмом". Так, це правда, але є принципова різниця. Якщо "прямий" алгоритм обчислює двічі, це обійдеться йому кроками, щоб зробити це, де - кроки, необхідні для обчислення один раз. З іншого боку, якщо алгоритм, який вперше шукає інший алгоритм, обчислює він коштує йому кроків, де - вартість першого обчислення, а другого, а , ймовірно, значно більший. Це явище, яке мене цікавить.f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2
user56834

@ Programmer2134 чи оптимізація компілятора буде концепцією, яка вас цікавить? Я взагалі не впевнений у цій теорії (особливо щодо її взаємодії з теорією складності), але це може бути потенційним прикладом
Марк

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