一位从事基因编程工作的同事问了我以下问题。我首先尝试基于贪婪方法来解决它,但经过第二次思考,我找到了贪婪算法的反例。因此,我认为在这里值得一提。
考虑由它们的表达式树表示的两个多项式。例如,和说明如下:
规则:
- 每个节点可以是变量名(),数字或运算符(+,-,×)。
- 树的有序遍历将导致有效的多项式。
- 操作节点的度数为2。其他节点的度数为0。所有节点的度数为1(除了root,其度数为0)。
在树的节点N上,如下定义基本操作:
- 基本操作可以在N之上构建一个表达式树(请参见下面的示例)。
类型1的基本操作的成本为1。类型2的成本等于新建的表达式树中{+,-,×}操作的数量。
类型2的示例:由于在节点N顶部构建的表达式树使用两个操作(-和×),因此以下基本操作的成本为2。
令T1和T2是代表多项式的两个表达式树。定义T1和T2 的距离如下:将T1转换为T2的基本操作的最低成本。请注意,我们不需要转换后的树具有与T2相同的结构。我们只希望它计算与T2相同的多项式。(有关示例,请参见注释。)
问题:给定T1和T2,提出了一种计算距离的算法。
示例1:假设T1和T2是本文开头所示的两棵树。要将右树转换为左树,可以在×的顶部构建成本为3的树,然后将4更改为1(总成本为4)。
2
如果不允许“删除”操作,则该距离不是距离。例如:无法将树T1 =(x * x)+4转换为T2 = x,但是可以将T2转换为T1,并在x的顶部加上(* x),然后加上(+4)。可以吗?或者,您应该将距离定义为将T1转换为T2或将T2转换为T1所需的最小运算。
—
Marzio De Biasi
当且仅当两个给定的(无除法)算术公式表示相同的多项式时,代价才等于0。如果我没有记错的话,这是该公司不知道要在体育的一个典型问题(由系统随机分配)
—
刚伊藤
对,就是那样。似乎在多项式恒等性测试问题的典型版本中,两个输入多项式作为电路给出,而不是公式。因此,我对公式版本为“典型”的说法可能不准确。无论如何,即使将公式版本放在P中似乎也是一个开放的问题。
—
伊藤刚(Tsuyoshi Ito)
@Vor:在当前公式中,输入T1实际上是一棵树,而输入T2是一个多项式,正好在以下意义上给出为一棵树。将T1更改为代表相同多项式的不同树通常可以更改答案,而以类似方式更改T2则不会。
—
伊藤刚(Tsuyoshi Ito)