从一组给定数字到给定数字的所有可能的OPERATIONS组合

时间:2012-12-13 23:43:36

标签: algorithm search combinations algebra

我发现很多帖子非常相似(指的是硬币更改问题),但使用sum运算符。 现在想象你可以加,减,乘和除,有没有办法让所有的计算组合到给定的数字?理想情况下在Java中

实施例: 鉴于1 5 2 4 9试图得到16

解决方案:

  • 9 + 1 + 4 + 2 = 16
  • 2 * 9-(5-4 + 1)= 16
  • 5 *(4 + 1)-9 = 16
  • 等等(我找到了20个)。

感谢。

1 个答案:

答案 0 :(得分:3)

由于您只有二进制操作,因此您可以将任何计算建模为二叉树,其中叶子是数字而所有其他节点都表示操作,例如前两个例子:

  +                  -
 / \                / \
9   +              *   +
   / \            /|  / \
  1   +          2 9 -   1
     / \            / \
    4   2          5   4

因此,您的算法需要以下部分:

  • 一个树生成器,用于所有可能的二叉树,直到某个节点计数:从一个数字节点开始,递归地用运算符节点和两个子节点(数字节点)替换每个数字节点(叶子),从而生成一系列树像这样

N   O       O       O       ...
   / \     / \     / \
  N   N   O   N   N   O
         / \         / \
        N   N       N   N
  • “树填充器”,为给定的二叉树(如上所示)生成所有可能的操作和数字插入,如:

  O    :    +     +    ...  -  ...
 / \       / \   / \       / \
N   N     1   5 1   2     1   5
  • 计算结果的树评估程序

快乐的节目! : - )