查找两个多项式之间的距离(表示为树)


20

一位从事基因编程工作的同事问了我以下问题。我首先尝试基于贪婪方法来解决它,但经过第二次思考,我找到了贪婪算法的反例。因此,我认为在这里值得一提。


考虑由它们的表达式树表示的两个多项式。例如,x32x+1x2+4说明如下:

规则:

  1. 每个节点可以是变量名x,y,z,),数字运算符(+,-,×)。
  2. 树的有序遍历将导致有效的多项式。
  3. 操作节点的度数为2。其他节点的度数为0。所有节点的度数为1(除了root,其度数为0)。

在树的节点N上,如下定义基本操作

  1. x×
  2. 基本操作可以在N之上构建一个表达式树(请参见下面的示例)。

类型1的基本操作的成本为1。类型2的成本等于新建的表达式树中{+,-,×}操作的数量。

类型2的示例:由于在节点N顶部构建的表达式树使用两个操作(-和×),因此以下基本操作的成本为2。

令T1和T2是代表多项式的两个表达式树。定义T1和T2 的距离如下:将T1转换为T2的基本操作的最低成本。请注意,我们不需要转换后的树具有与T2相同的结构。我们只希望它计算与T2相同的多项式。(有关示例,请参见注释。)

问题:给定T1和T2,提出了一种计算距离的算法。

示例1:假设T1和T2是本文开头所示的两棵树。要将右树转换为左树,可以在×的顶部构建成本为3的树,然后将4更改为1(总成本为4)。

x4x4+4x3+6x2+4x+1x(x+1)4x4x36x24x


2
如果不允许“删除”操作,则该距离不是距离。例如:无法将树T1 =(x * x)+4转换为T2 = x,但是可以将T2转换为T1,并在x的顶部加上(* x),然后加上(+4)。可以吗?或者,您应该将距离定义为将T1转换为T2或将T2转换为T1所需的最小运算。
Marzio De Biasi

4
当且仅当两个给定的(无除法)算术公式表示相同的多项式时,代价才等于0。如果我没有记错的话,这是该公司不知道要在体育的一个典型问题(由系统随机分配)
刚伊藤

4
@Tsuyoshi:哦,我知道了。您要指出多项式身份测试问题。(良好的参考文献:[1 ]和[2 ])。我必须考虑一下。同时,欢迎任何建议。
MS Dousti 2011年

4
对,就是那样。似乎在多项式恒等性测试问题的典型版本中,两个输入多项式作为电路给出,而不是公式。因此,我对公式版本为“典型”的说法可能不准确。无论如何,即使将公式版本放在P中似乎也是一个开放的问题。
伊藤刚(Tsuyoshi Ito)

2
@Vor:在当前公式中,输入T1实际上是一棵树,而输入T2是一个多项式,正好在以下意义上给出为一棵树。将T1更改为代表相同多项式的不同树通常可以更改答案,而以类似方式更改T2则不会。
伊藤刚(Tsuyoshi Ito)

Answers:


10

树编辑距离是字符串编辑距离的概括。两棵树之间的距离是将一棵树变成另一棵树所需的最小节点插入数\删除数\和重新标记数。(当我们删除节点v时,v的子代成为parent(v)的子代)。当树木无序时,问题是NP困难的,但是当树木有序时(即,兄弟姐妹之间从左到右的顺序),问题可以在O(n ^ 3)的时间内解决(如本文所述) Sadeq提到)。一个很好的调查报告对此进行了描述:http : //portal.acm.org/citation.cfm?id=1085283


1
谢谢阿维夫。如果您合并您的回复,那将是很棒的(我认为您以前的帐户存在问题)。您可以使用建议这个职位(特别,此链接)。
MS Dousti 2011年

这种方法将如何用等价多项式覆盖不同的树
narek Bojikian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.