Автор: NO.
Не обязательно. Можно любой, лишь бы на входе и/или выходе были алгоритмы. |
|
Ну если метаалгоритм не выполнет функцию оптимизации, то нафик он тогда нужен? Получится типа, поматросил и бросил

А просто пример алгоритма оптимизирующего алгоритм, привожу:
Рассмотрим задачу:
Пусть задано натурально число
N.
Требуется получить число
N из числа 1 некоторым числом следующих операций:
1. Прибавление к числу единицы.
2. Умножение числа на 2.
Для любого заданного числа количество операций конечно. Тогда, алгоритм решения задачи представим в виде булевской строки, где 0 показывает выполнение операции под пунктом 1, а 1 показывает выполнение операции под пунктом 2.
Назовем алгоритм
A1 более оптимизированным чем алгоритм
A2, если размер "строки алгоритма"
A1 меньше чем размер "строки алгоритма"
A2.
Для любого числа
N, решением задачи будет алгоритм в виде строки: из
N-1 нулей. Возмем его за эталонный, самый не оптимизированный.
Построить метаалгоритм, преобразующий "строку алгоритма" в более короткую строку, можно следующим способом:
Сам метаалгоритм составить из списка функций, преобразующих кусочки строки в более короткие кусочки, для чего нужно составить базу данных этих функций, для чего нужно предварительно создать алгоритм обучающий метаалгоритм, т.е. создающий эту базу.
Далее метаалгоритм прогоняет входную "алгоритмическую строку" и делает сверку кусочков строки со своей базой, при совпадении заменяет.
И прогнав несколько раз алгоритм, пока алгоритм будет сужаться, через метаалгоритм, мы получим более оптимизированный алгоритм.
Ну конечно эффективность метаалгоритма будет зависеть от размера его базы данных, и памяти нужно будет немерено. Создать более хитрый вариант построения, это уже нужно подумать...