我需要遍历由数字数组 ai 定义的有序序列,i = 1..n,其中n是每个序列元素的长度,每个ai 指定输出序列中位置 i 可能值的最大数量。
例子:
a = {10,10,10}
序列:000
,001
,002
, ...999
(000
到999
)a = (2,3,2}
序列:000
、001
、010
、011
、020
、021
,100
,101
,110
,111
,120
,121
(注意:我不仅需要打印序列,还需要遍历它的元素,其中每个元素都是一个数组,例如 {1,2,1}。)
在我实现这个之前,我想问一下大家有什么意见吗?也许这是一个已知问题(名称?),并且已经有可用的代码,或者它简化为其他一些众所周知的问题?它确实与排列问题有相似之处。
最佳答案
这是一个 Cartesian product .
在 Python 中,itertools.product
产生这样的元组列表。
>>> import itertools
>>> list(itertools.product(*map(range, [2, 3, 2])))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (0, 2, 0), (0, 2, 1),
(1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1), (1, 2, 0), (1, 2, 1)]
在其他语言中,使用嵌套循环很容易创建笛卡尔积:
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 2; k++)
cout << i << j << k << endl;
关于algorithm - 这个序列生成问题的名称是什么?任何意见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410933/