Function 从一组有限的现有函数组成目标函数的最快方法是什么

Function 从一组有限的现有函数组成目标函数的最快方法是什么,function,math,optimization,function-composition,Function,Math,Optimization,Function Composition,给定一组有限的函数和两个数字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,函数由尽可能少的函数组成 最快的解决方案可能不是最佳方案——任何一方面的建议都将不胜感激。 在您的示例中,从A=1开始计算f1(1)=0,f2(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
,函数由尽可能少的函数组成

最快的解决方案可能不是最佳方案——任何一方面的建议都将不胜感激。

在您的示例中,从
A=1
开始计算
f1(1)=0
f2(1)=2
,以及
f3(1)=1
。然后从那里继续(
f1(0)、f2(0)、f3(0)、f1(2),…
)直到到达
B
。忽略以前计算过的数字。 如果存在最优解,这将产生最优解

如果
A
B
都是整数,那么总会有一个形式为
f1(f1(…f1(A))
f2(f2(…f2(A)…)
的解,因此搜索不是无止境的。

在您的示例中,从
A=1
开始计算
f1(1)=0
f2(1)=2
,和
f3(1)=1
。然后从那里继续(
f1(0),f2(0),f3(0),f1(2),…
)直到您达到
B
。忽略以前计算过的数字。 如果存在最优解,这将产生最优解


如果
A
B
都是整数,则始终存在
f1(f1(…f1(A)…)
f2(f2(…f2(A)…)形式的解
,所以搜索不是无止境的。

那些函数
f1
f2
f3
是固定的吗?那么我们是否编写了一个算法,知道这些是我们要处理的函数?因为如果你想要一个函数的可变列表,这个问题就很难回答。如果允许实数的话(这通常是在谈论函数时假设的),那么大多数对
A,B
将根本没有给定函数的解决方案,例如在您的情况下,如果
A
是整数而
B
不是整数,就像
A=1,B=1.1
。但是如果您将域限制为整数并使用函数
f1(x)=4*x
f2(x)=x*x
例如,无论给定
A
的值是什么,你都永远不会得到
B
的值,比如
2,3,5,6,7,10,
。因此,如果事先不知道有关函数的更多信息,搜索在大多数情况下将是无止境的。@MikePierce是的,集合中的函数将是常量,尽管我想知道是否有一个通用的解决方案,无论集合中的函数是什么,@coproc有没有办法快速验证搜索是否是无止境的?如果除了原始的函数集合之外,还提供了相反的结果呢?如果总是这三个函数,那么搜索就不是无止境的。但这是你的另一个评论似乎不是这样。所以,是的,这个问题在没有任何函数条件的情况下是不可能回答的。单调的,内射的,满射的,或者类似的假设可能使这个问题有可能回答。那些函数
f1
f2
f3
是固定的吗?那么我们写一个算法吗rithm知道这些是我们要处理的函数吗?因为如果你想要一个函数的可变列表,这个问题是不可能回答的。如果允许实数(这通常是在谈论函数时假设的),则大多数对
A,B
将根本没有给定函数的解决方案,例如,在您的情况下,如果
A
是整数而
B
不是整数,例如
A=1,B=1.1
。但是如果您将域限制为整数,并使用函数
f1(x)=4*x
f2(x)=x*x
例如,无论给定
A
的值是什么,你都永远不会得到
B
的值,比如
2,3,5,6,7,10,
。因此,如果事先不知道有关函数的更多信息,搜索在大多数情况下将是无止境的。@MikePierce是的,集合中的函数将是常量,尽管我想知道是否有一个通用的解决方案,无论集合中的函数是什么,@coproc有没有办法快速验证搜索是否是无止境的?如果除了原始的函数集合之外,还提供了相反的结果呢?如果总是这三个函数,那么搜索就不是无止境的。但这是你的其他评论似乎不是这样。所以,是的,如果没有函数的任何条件,这个问题一般是不可能回答的。单调的,内射的,满射的,或者类似的假设可能会让这个问题有可能回答。