数学运算矩阵

时间:2013-06-22 15:54:43

标签: algorithm

我过去试过问过这个问题,但我的问题并不清楚。 所以让我们再试一次,希望这次能够清楚。 我有一个像这样的3 * 3矩阵:

a * b
+ c *
d + e

我必须按照这个逻辑找到所有可能的数学运算组合:

a * ba + ca * ca + db *c, b * c , b * ec + d,{{1 }},c + dc * ec + e是此矩阵中两个操作数组合的运算。由于我选择了乘法和加法,因此无需执行d + eb * a操作,因为它们等于上面已经提到的序列d + ca * b。有些人会问为什么c + db * c会出现两次。原因是c + d通过两个不同的c符号到达d,同样适用于+b,因为它们通过两个不同的倍数相互接触迹象。 开发这个逻辑我必须通过这个矩阵,找到三个四和五个操作数的所有其他序列。

有人可以帮我找到一个算法,使用上面提到的逻辑找到所有数学运算的组合吗?

我希望这次我的问题很清楚。我将非常感谢您帮助解决这个难题。非常感谢。

1 个答案:

答案 0 :(得分:1)

我假设您唯一的运营商将是*+,因为您没有提及其他情况。如果这个假设不正确,你需要尽快告诉我(这是询问crystal-clear question的一部分)。

将矩阵表示为图形,将符号作为顶点,以及操作数{a, b, c, d, e}和运算符{*_1, *_2, +_1, +_2}之间的边。

接下来,从每个顶点开始,对所有从未访问过两次顶点的奇数 - 加长路径进行深度优先搜索(标准DFS)。

这将为您提供所有可能的有效数学表达式的列表。

最后,你需要减少多余的"表达式(意思是与列表中的另一个表达式具有交换等效的 1 的表达式)。我们要做的是对所有表达式应用排序。对于每个表达式,我们将首先列出所有乘法运算,然后为每个运算符按字母顺序列出其操作数,从而生成等效表达式。因此,例如e + d * b + a - > b * d + a + ee + b * a * d - > a * b * d + e。利用+*的关联性和交换性,这是有效的。这并不难,使用解析树。一旦我们有了这个订单,就很容易删除重复项。

1 :不知道这是否是一个真实的词;现在是。