仅使用除法运算符最大化表达式

时间:2016-06-16 15:20:10

标签: algorithm discrete-mathematics

问题是我必须找到最大化n个整数表达式的算法(它们可以是负数),只需在某些地方放置括号即可。我不能改变数字的顺序。

示例:

输入:4 6 8 2 5

输出应为:4 /(6/8/2/5)

目标是放置括号以最大化给定表达式的结果。在某些情况下,根本不需要放括号。

示例:

输入:8 -6 3 -2 -4 5 输出:8 / -6 / 3 / -2 / -4 / 5

输出应该是最大值!

我有想法使用递归找到所有可能性,但我的解决方案没有被教授批准(他说有一个更容易和更快的解决方案!)现在当我的截止日期已过,我正在寻找直接的帮助!

1 个答案:

答案 0 :(得分:1)

也许这不是编程测试而是数学测试。

假设你的输入是:a b c d e f ... z

考虑一下,如果你没有放任何括号,结果可以写成

a ^ + 1 * b ^ -1 * c ^ -1 * d ^ -1 ... z ^ -1

当你输入任何括号对时:

  • 括号内的第一个数字保留相同的指数
  • 括号内的所有其他内容将更改指数符号

因此,最终影响结果的所有可能性由以下表达:

  • a:指数始终为+1
  • b:指数始终为-1
  • 所有其他:您可以使用括号选择所需的指数。

所以解决方案如下:

  • 查看输入的符号并定义结果的符号(偶数或奇数的负数)
  • 如果结果必须是积极的
    • 然后你的任务是获得最高的绝对值
    • 在这种情况下,解是a /(b / c / d / .... z)
    • 接下来是
      • a固定在分子
      • b固定在分母
      • 我们尽可能地划分b,所以我们的分母的绝对值最低
      • 所以结果的绝对值将是最高的
  • 如果结果必须是否定的
    • 然后你的任务是获得最低的绝对值
    • 在这种情况下,解是a / b / c / d / .... z(无括号)
    • 接下来是
      • a固定在分子
      • 我们尽可能地分割,因此我们有最小可能的绝对值

也许现在我在这个数学工作之后编码工作可以开始,结果时间复杂度将是O(n):只计算负输入的数量,你得到答案!。