【问题标题】:Is there a closed form available for the following table?下表是否有可用的封闭式表格?
【发布时间】:2017-09-09 17:31:32
【问题描述】:

下面是一个具有递归关系的表格,因为当前单元格的值是上单元格和左单元格的总和。

我想找到由v(x) 表示的任何给定行的奇数位置,如第一列所示。

目前,我正在维护两个 one 数组,我用新的 sum 值更新它们并逐字检查每个位置的值是奇数还是偶数。

是否存在一个封闭的表格,可以让我直接说出可用的奇数位置(例如,对于第 4 行,在这种情况下它应该告诉我 p1 和 p4 是奇数位置)。

由于它遵循特定的模式,我非常肯定应该存在一个封闭的形式,它会在数学上告诉我位置,而不是计算每个值并检查它。

【问题讨论】:

  • 这听起来更像是数学而不是编程。

标签: math optimization series


【解决方案1】:

您看到的数字是帕斯卡三角形中的数字,只是旋转了 90 度。您通常会看到它是这样写的:

              1
            1   1
          1   2   1
        1   3   3   1
      1   4   6   4   1
    1   5   10  10  5   1
  1   6   15  20  15  6   1
1   7   21  35  35  21  7   1
            ...

您正在沿着从左(或右,取决于您的视角)条带向下的对角条纹切割帕斯卡三角形,而您要问的问题是如何找到每个条纹中奇数的位置。

有一个名为Lucas's theorem 的数学结果可用于确定帕斯卡三角形中的给定条目是偶数还是奇数。帕斯卡三角形的第 m 行第 n 列的条目由 (m 选择 n) 给出,卢卡斯定理说 (m 选择 n) mod 2 (如果数字是奇数则为 1,否则为 0) 可以通过比较位找到m 和 n。如果 n 有一个位设置在 m 没有设置该位的位置,则 (m 选择 n) 是偶数。否则,(m 选择 n) 是奇数。

举个例子,让我们试试(5选3)。 5 中的位为 101。3 中的位为 011。由于 3 的 2 位已设置,而 5 的 2 位未设置,所以数量(5 选择 3)应该是偶数。并且由于 (5 choose 3) = 10,我们看到确实如此!

在使用关系运算符的伪代码中,您基本上需要以下内容:

if ((~m & n) != 0) {
    // Row m, entry n is even
} else {
    // Row m, entry n is odd.
}

【讨论】:

  • 计算“n”个位置和“n”个 v 值的方法的复杂性是多少?还是 O(n^2) 吗?
  • 是的,我想是的。但是,这种方法可以让您直接计算哪些位置是奇数,而无需构建表格。您可以使用它来确定您甚至没有生成的行中的奇数。
  • 这意味着使用这种方法我可以直接找到任何值(例如 v100),甚至无需费心找到它的所有前辈?
  • @user3243499 是的!
  • @user3243499 我没有任何链接可提供 - 抱歉!我今天早些时候刚刚了解了卢卡斯定理。可能有一种更有效的方法可以找到所有奇怪的索引,如果我想到一个,我一定会告诉你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2018-01-12
  • 2015-06-06
  • 1970-01-01
相关资源
最近更新 更多