这个序列生成问题的名称是什么?任何意见?

Fra*_*ank 2 language-agnostic algorithm sequence

我需要迭代一个由数字a i,i = 1 .. n定义的有序序列,其中n是每个序列元素的长度,每个a i指定位置i的可能值的最大数量在输出序列中.

例:

  • 一个= {10,10,10}
    序列:000,001,002,... 999(从十进制数000999)

  • A =(2,3,2}
    序列:000,001,010,011,020,021,100,101,110,111,120,121

(注意:我不仅需要打印序列,而且我需要遍历其元素,其中每个元素都是一个数组,例如{1,2,1}.)

在我实施之前,我想问一下是否有人有任何意见?也许这是一个已知的问题(名称?),并且已经有代码可用,或者它减少到其他一些众所周知的问题?它确实与排列问题有相似之处.

Jas*_*rff 7

这是笛卡尔积.

在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)

  • 感谢名称和python代码.当然,对于其他语言,你不能只使用嵌套循环,因为它必须适用于所有$ n $,而不仅仅是$ n = 3 $,所以我想必须使用递归. (2认同)