Fra*_*ank 2 language-agnostic algorithm sequence
我需要迭代一个由数字a i,i = 1 .. n定义的有序序列,其中n是每个序列元素的长度,每个a i指定位置i的可能值的最大数量在输出序列中.
例:
一个= {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}.)
在我实施之前,我想问一下是否有人有任何意见?也许这是一个已知的问题(名称?),并且已经有代码可用,或者它减少到其他一些众所周知的问题?它确实与排列问题有相似之处.
这是笛卡尔积.
在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)]
Run Code Online (Sandbox Code Playgroud)
在其他语言中,使用嵌套循环很容易创建笛卡尔积:
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;
Run Code Online (Sandbox Code Playgroud)