【问题标题】:Algorithm for finding similar formulas [closed]寻找相似公式的算法[关闭]
【发布时间】:2015-12-30 21:07:41
【问题描述】:

我正在寻找一些算法来以定量的方式找到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

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

谁能给我一些帮助?谢谢。

【问题讨论】:

  • 两个对象之间没有固有的相似性。需要为此设计一些指标。
  • @WillemVanOnsem,感谢您的回复。是的,“指标”是我正在寻找的。有什么建议吗?

标签: algorithm math formula


【解决方案1】:

我将采取的方法是为表达式生成解析树,然后应用树差异度量。有很多可供选择(在网上搜索“树距离度量”“解析树距离”“解析树相似度”) 甚至更多,如果您将自己限制在二叉树(没有三元运算符,例如 ?:)。通常的方法是使用tree edit distance。您需要解决的几个问题:

  1. 变量名称更改会影响相似性吗?
  2. 交换运算符的操作数重新排序会影响相似性吗? (例如,a + b*cb*c + a。)

附:可以在here 找到一篇关于测量树结构之间相似性的不错的调查类文章。

【讨论】:

    【解决方案2】:

    我假设您正在寻找一个指标来比较/检查这些公式的相似性。如果它们中的每一个都将只包含三个变量testab,那么一个非常简单的度量是取ab 的系数和常数值的比率。

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

    【讨论】:

      【解决方案3】:

      我们可以将每个多项式表示为单项式的总和。然后假设我们可以比较单项式,我们比较第一个多项式中的一个单项式和第二个多项式中的一个单项式的每一对,然后我们使用匹配算法来找到匹配项,该匹配项为我们提供了对中差异之和最小的匹配项。如果一个多项式的单项式比另一个多,我们只需添加所需的 0 个单项式(A+0+0+0+0....)。然后剩下的就是找到两个单项式之间的差异,我建议按照 Ted Hopp 建议的方式进行操作。这样,您应该得到比直接比较原始多项式更准确的结果。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2010-09-09
        • 1970-01-01
        • 2012-03-16
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2012-04-27
        相关资源
        最近更新 更多