代码之家  ›  专栏  ›  技术社区  ›  Michael

如何用算术运算来表示给定数字?

  •  3
  • Michael  · 技术社区  · 14 年前

    interview question

    我提议用蛮力搜索(用树枝和绳子)。有意义吗?

    6 回复  |  直到 14 年前
        1
  •  1
  •   knivil    14 年前

    Haskell编程,第11章:倒计时问题

        2
  •  4
  •   Mark Peters    14 年前

    暴力听起来是一种有效的方法。但是暴力是一种不知情的搜索……当你到达搜索树中的一个分支时,它并不能让你有根据地猜测该走哪条路。

    你可能想调查的是 heuristic functions 见多识广的 . 一个启发式函数会观察一个状态,并估计你离目标有多远。如果你能找到一个有效的启发式函数,你可以应用如下算法 A* .

        3
  •  1
  •   RedGrittyBrick    14 年前

    我会问

    • Numbers 整数?
    • 数字的比例有上限吗?
    • 哪个 standard mathematical techniques
      • 只有简单的算术?
      • 回报?
      • 触发函数?

        4
  •  0
  •   Brian Stinar    14 年前

    我认为这是有道理的。

    你可以利用乘法之间的对称性来进一步修剪你的树。a*b=b*a。

        5
  •  0
  •   IVlad    14 年前

    另一种解决方法是使用 genetic algorithms . 您的填充将以插入数组元素之间的随机运算符开始。

    S 成为你需要的号码。你的健身功能可能是 |S - Value(E[i])| Value(E[i]) 是在评估 i -在你的人口中的表达。

    变异运算符可以简单地将一个运算符更改为另一个运算符,而交叉函数可以将表达式左侧的运算符与另一个表达式右侧的运算符组合在一起。

    我不知道这和暴力相比会怎么样,但这是一个不同的解决方案,我想这会让你在采访中脱颖而出,因为每个人都能看到暴力的解决方案。

    如果你只需要一个足够好的解决方案 S公司 ,但离得足够近),那么这肯定比暴力要快。在我所实现的少数遗传算法中,我注意到它们快速地接近接近最优解,但速度相当慢,如果你想要最优解,有时甚至会陷入困境。

        6
  •  0
  •   Josephine    14 年前

    如果是这样,一个简单的分支搜索不会终止,因为一元操作的使用次数没有先验限制。如果没有,一个天真的搜索可能会工作得很好。

    这里有一个有趣的策略,如果不是一个有效的策略:为正在使用的算术请求或生成一个BNF语法。像这样违反规则

    <

    然后用这个语法来发展所有可能的表达,比如说,使用不到20个语法规则。对它们进行评估。它将被保证是有界的,并将生成所有在该语言中有效的“不太复杂”表达式。