我正在寻找一些算法来定量查找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。
答案 0 :(得分:2)
我将采用的方法是为表达式生成一个解析树,然后应用树差异度量。有很多选择(在网上搜索&#34;树距离指标&#34; ,&#34;解析树距离&#34; 或< em>&#34;解析树的相似性&#34; ),如果你把自己限制在二叉树(没有三元运算符,如?:
),甚至更多。通常的方法是使用tree edit distance。您需要解决的几个问题:
a + b*c
与b*c + a
。)P.S。关于测量树结构之间相似性的一篇很好的调查类文章可以找到here。
答案 1 :(得分:0)
我假设您正在寻找比较/检查这些公式的相似性的指标。如果每个变量只包含三个变量test
,a
和b
,那么一个非常简单的指标就是采用系数a
,{{ 1}}和常量的值。
然后您可以使用这样的公式来判断相似性:
b
。 similarity = (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建议的方式进行。通过这种方式,您可以获得比直接比较原始多项式更精确的结果。