想象一下,你有一个跳舞的机器人,在从 origin =n
开始的维欧几里得空间中。P_0
(0,0,...,0)
机器人可以做出m
各种舞蹈动作D_1, D_2, ..., D_m
D_i
是n
整数的 -vector(D_i_1, D_i_2, ..., D_i_n)
如果机器人进行舞蹈动作,则i
其位置变化为D_i
:
P_{t+1} = P_t + D_i
机器人可以按照自己的意愿以任何顺序进行任何舞蹈动作。
让k-dance定义为 k 个舞蹈动作的序列。
显然有m^k
可能的k-dances。
我们有兴趣知道 k-dance 的可能结束位置的集合,以及对于每个结束位置,有多少 k-dance 在该位置结束。
一种方法如下:
P0 = (0, 0, ..., 0);
S[0][P0] = 1
for I in 1 to k
for J in 1 to m
for P in S[I-1]
S[I][P + D_J] += S[I][P]
现在S[k][Q]
将告诉你有多少 k-dances 在位置 Q 结束
假设 , n
,m
很小|D_i|
(小于 5)并且k
小于 40。
有更快的方法吗?我们可以S[k][Q]
用某种与线性代数相关的技巧以某种方式“直接”计算吗?或其他方法?