这个问题可以用组合学来解决吗?

时间:2020-12-19 08:55:57

标签: algorithm

给定两个数 N 和 M,找出满足以下条件的长度为 N 的数组的个数 -

  1. 所有元素必须介于 1 和 M 之间,包括 1 和 M
  2. 数组的第一个和最后一个元素必须相同
  3. 没有两个连续的元素应该相似

例如,让

N = 3,M = 3

可能的数组是

[1, 2, 1]

[1, 3, 1]

[2, 1, 2]

[2, 3, 2]

[3, 1, 3]

[3, 2, 2]

因此输出为 6。

N 和 M 的范围是从 3 到 10^18,包括在内。

我能得到有关如何解决这个问题的任何提示吗?我试图找到一个数学公式,但它给出了 N > 4 的错误答案。

我的方法 ->

对于N = 3,第一位和最后一位是固定的,我们可以在中间放置M-1个元素。所以计数 = M * (M - 1)

对于 N = 4,公式变为 (M - 1) * (M - 2) * M

对于 N > 5,我想出了一个通用公式,但它给出了错误的答案。

1 个答案:

答案 0 :(得分:1)

定义问题的另一种方法是找到用 M 种颜色为 N-1 节点循环着​​色的方法数,使得没有两个相邻节点具有相同的颜色。我们可以使用 deletion-contraction recurrence 来计算颜色。设 C(n, k) 是用 n 种颜色为 k 节点循环着​​色的方法数,P(n, k) 是为 n 节点着色的方法数k 颜色的路径。我们得到重复

C(2, k) = k (k−1),    as you observed;
C(n, k) = k P(n, k) − C(n−1, k),
    since an n-node cycle with an edge deleted is an n-node path,
    and an n-node cycle with an edge contracted is an (n−1)-node cycle.

P(1, k) = k,   obviously;
P(n, k) = k P(n−1, k) − P(n−1, k)
        = (k−1) P(n−1, k)
     since an n-node path with the first or last edge deleted
     is an (n−1)-node path with an isolated node
     that can be colored independently in one of k ways,
     and an n-node path with an edge contracted is an (n−1)-node path.

我们可以为 P(n, k) 编写一个封闭式公式,并为 C(n, k) 获得一个新的循环:

P(n, k) = k (k−1)^(n−1)
C(n, k) = k (k−1)^(n−1) − C(n−1, k).

这个循环可以变成一个线性时间算法,或者如果你愿意,如果我们展开C(n, k),我们可以把它表示为一个交替和

           n      (n−i)                     (n-2)
C(n, k) = Sum (−1)      k (k−1)^(i−1) + (−1)      k (k−1)
          i=3

然后向 WolframAlpha 索取 closed form