Ok, а если есть возможность все возможные варианты строк пропустить через алгоритм?
Если программа детерминированна, т.е. если это реально алгоритм, то восстановить некоторую программу, вычисляющую функцию, очевидно можно.
Т.е. если мы знаем, что
для
, то программа
Код:
int Func(int x){
if(x=x_1){
return y_1;
}
...
if(x=x_n){
return y_n;
}
}
является одной из искомых.
На самом деле клиент конечно же хочет получить не эту программу, а ей эквивалентную, но более короткую и читабельную (хотя в явном виде это не сказал, ибо это клиент, ему главное вовремя выполнить задачу перед начальством). Однако, класс эквивалентных программ, очевидно, счетен по мощности, а кроме того, зависит от синтаксиса языка. Т.е. на самом деле задача имеет вид: дан текст программы, надо его максимально упростить и сделать понятным
для человека. Однако, максимальное упрощение сродни поиску колмогоровской сложности, которая, как известно, невычислима. Кроме того, учет т.н.
человеческой логики чревато некрасивостью программ. В результате нам на самом деле нужно суметь поставить задачу корректно, после чего уже пытаться решать ее. Нам надо ограничиться неким явным синтаксисом программ, а также
явно задать на классе эквивалентных программ достаточно простую функцию упрощения, близкую к оптимальной, но не оптимальную. Последнее - не самая тривиальная задача, причем уже из области формальных грамматик, тут думать надо.
Еще одним подводным камнем работы с клиентом является тот факт, что после самостоятельного переосмысления задачи следует отдать переосмысление клиенту на подтверждение. Часто клиент после подтверждения
в ужасе сильно меняет исходную постановку задачи. Например так: дана неизвестная
и известные
, где
мало. Надо найти
или показать, что такого
нет.