【问题标题】:Numerical pyramid puzzle algorithm needed [closed]需要数字金字塔拼图算法[关闭]
【发布时间】:2015-06-18 16:18:01
【问题描述】:

有没有通用的算法来解决这种难题?

http://i.stack.imgur.com/PNH5Q.jpg

任何 sub O(N^3) 解决方案将不胜感激

【问题讨论】:

  • 您需要提供说明。另外,你试过什么?

标签: algorithm numerical


【解决方案1】:

听起来像https://en.wikipedia.org/wiki/Constraint_satisfaction 对我来说 - 你将问题提出为一组算术方程,通常具有小的整数未知数,并构建一个数据结构,当你对其中一个中的一些未知数有足够的了解时推导出其他方程。然后,您开始对可能的解决方案进行树搜索,使用数据结构从迄今为止的假设中计算出足够多的未知数,以使树搜索可行和/或排除可能无法及早工作的部分解决方案。

前段时间,我和一个小组在同一个办公室工作,使用 ILOG Solver 进行调度,并注意到它的手册中有许多使用它来解决简单逻辑/数字问题的示例 - 我认为 https://en.wikipedia.org/wiki/Verbal_arithmetic 就是其中之一。 (他们最终放弃了调度,转而采用更简单的方法。所述原因是 ILOG Solver 调度不够透明,无法让用户了解为什么无法满足的调度无法满足,从而找出需要放松的约束)。

【讨论】:

    【解决方案2】:

    假设金字塔中的每个单元格都是其下方两个单元格的总和。

    定理

    对于任何子金字塔P,让数组rP 中长度为n+1 的任意行。然后总和

    C(n,0)*r[0] + C(n,1)*r[1] + ... + C(n,n)*r[n]
    

    对于P 的每一行都是常数。 (C(i,j)binomial coefficient。)


    例如,让P 成为整个金字塔。对于第一行,我们有:

    C(0,0) * 223 = 223
    

    对于底行,我们有:

    C(4,0)*7 + C(4,1)*12 + C(4,2)*x + C(4,3)*18 + C(4,4)*6 = 133 + 6*x
    

    其中x 是底行中的未知值。

    应用上述定理:

    223 = 133 + 6*x
    

    由此得出x = 15

    为了证明这个定理的一致性,可以将P' 作为峰值为60 的3 行子金字塔。那么

    C(0,0)*60 = C(2,0)*12 + C(2,1)*x + C(2,2)*18
    

    它再次遵循x = 15

    一旦完全知道一行,它上面的所有行都直接跟随。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2018-02-17
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多