需要数字金字塔拼图算法

时间:2015-06-18 16:18:02

标签: algorithm numerical

是否有任何通用算法可以解决这种难题?

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

任何亚O(N ^ 3)解决方案都将受到高度赞赏< 3

2 个答案:

答案 0 :(得分:1)

对我来说听起来像https://en.wikipedia.org/wiki/Constraint_satisfaction - 你把问题看作是一组算术方程式,通常是小整数未知数,并建立一个数据结构,当你对一个未知数有足够的了解时推导他人的等式。然后,您开始对可能的解决方案进行树搜索,使用数据结构从目前的假设中计算出足够的未知数,以使树搜索可行和/或排除不可能提前工作的部分解决方案。 / p>

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

答案 1 :(得分:1)

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

<强>定理

对于任何子金字塔P,让数组r为长度为P的{​​{1}}中的任意一行。然后总和

n+1

对于C(n,0)*r[0] + C(n,1)*r[1] + ... + C(n,n)*r[n] 的每一行都是常量。 (Pbinomial coefficient。)

enter image description here

例如,让C(i,j)成为整个金字塔。对于第一行,我们有:

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作为3行子金字塔,其峰值为P'。然后

60

再次跟随C(0,0)*60 = C(2,0)*12 + C(2,1)*x + C(2,2)*18

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