2017-11-06 4 views
1

有限集合と2つの数AとBが与えられた場合、f(A) = Bを満たす複合関数を決定する最速の方法は何でしょうか?例えば既存の関数の有限集合からターゲット関数を構成する最も速い方法

我々が持っている場合は、:

functions = { 
    f1(x) = x - 1, 
    f2(x) = x + 1, 
    f3(x) = x * x 
} 

A = 1, B = 9

を次に最適解は次のようになります。f(x) = f3(f2(f2(x)))f(A) = Bであり、その機能は可能な限り少ない機能で構成されているからです。

解決する最速の解決策は最適ではないかもしれません。いずれの面でもアドバイスをいただければ幸いです。あなたの例では

+0

これらの関数 'f1'、' f2'、および 'f3'は固定されていますか?では、それらを知るアルゴリズムを書くのですか?あなたが関数の可変リストを持っていたいのであれば、この質問は全く答えることができません。 –

+0

実数が許されている場合(通常、関数について話すときに仮定されます)、ほとんどの 'A、B'ペアは与えられた関数の解を全く持たないでしょう。例えば' A'が整数でB 'A = 1、B = 1.1'のようにはなりません。しかし、ドメインを整数に制限し、関数 'f1(x)= 4 * x'と' f2(x)= x * x'を取ると、例えば '2 'のような' B'の値に達することはありません、3、5、6、7、10、... 'Aの値が何であっても。したがって、関数に関する情報があらかじめわかっていなければ、ほとんどの場合、検索は無限になります。 – coproc

+0

@MikePierceはい、セット内の関数は定数になりますが、セット内の関数に関係なく機能する一般的なソリューションがあるかどうか疑問に思っていました。 –

答えて

0

Breadth-first search

A=1で開始し、f1(1) = 0を計算し、f2(1) = 2、およびf3(1) = 1。その後、そこから(f1(0), f2(0), f3(0), f1(2), ...)までBになるまで進みます。以前に計算された数値は無視してください。 最適解が存在する場合、これが得られます。

ABが両方とも整数の場合、常にf1(f1(...f1(A)...)またはf2(f2(...f2(A)...)の形式の解が存在するため、検索は無限ではありません。

関連する問題