查找类似公式的算法

时间:2015-12-30 21:07:41

标签: algorithm math formula

我正在寻找一些算法来定量查找similar公式。

例如,给出以下三个公式:

1. test = a + 4 - b
2. test = a - 16 + 2 * b
3. test = a + 5

我可以以某种方式计算它们之间的相似性,比如说:

Similarity(1,2) = 0.5
Similairty(2,3) = 0.1

有没有标准方法可以这样做?基本上我想我需要从每个公式中提取一些数字向量,代表它们的特征,但我不知道怎么做......

有人可以给我一些帮助吗? THX。

3 个答案:

答案 0 :(得分:2)

我将采用的方法是为表达式生成一个解析树,然后应用树差异度量。有很多选择(在网上搜索&#34;树距离指标&#34; &#34;解析树距离&#34; 或< em>&#34;解析树的相似性&#34; ),如果你把自己限制在二叉树(没有三元运算符,如?:),甚至更多。通常的方法是使用tree edit distance。您需要解决的几个问题:

  1. 变量名称更改会影响相似性吗?
  2. 交换运算符的操作数重新排序会影响相似性吗? (例如,a + b*cb*c + a。)
  3. P.S。关于测量树结构之间相似性的一篇很好的调查类文章可以找到here

答案 1 :(得分:0)

我假设您正在寻找比较/检查这些公式的相似性的指标。如果每个变量只包含三个变量testab,那么一个非常简单的指标就是采用系数a,{{ 1}}和常量的值。

然后您可以使用这样的公式来判断相似性: bsimilarity = (ratio of constants) * X^2 + 2 * (ratio of coefficients of a) * X + (ratio of coefficients of b)中这个二次方程的根越接近-1,相似性越高。

答案 2 :(得分:0)

我们可以将每个多项式表示为单项式的和。然后假设我们可以比较单项式,我们比较第一个多项式中的每一个单项式和第二个中的一个单项式,然后我们使用匹配算法找到匹配,它们给出了对中差异的最小总和。如果一个多项式具有比另一个更多的单项式,我们只需添加0个单项式所需的任何数量(A + 0 + 0 + 0 + 0 ....)。然后剩下的就是找到两个单项式之间的区别,我建议按照Ted Hopp建议的方式进行。通过这种方式,您可以获得比直接比较原始多项式更精确的结果。

相关问题