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

标签 algorithm language-agnostic sequence

我需要遍历由数字数组 ai 定义的有序序列,i = 1..n,其中n是每个序列元素的长度,每个ai 指定输出序列中位置 i 可能值的最大数量。

例子:

  • a = {10,10,10}
    序列:000, 001, 002, ... 999(000999)

  • a = (2,3,2}
    序列:000001010011020 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/

相关文章:

arrays - 仅使用 3 个元素形成数组的方法有多少?

language-agnostic - 是否有通用的 "bad word"列表?

Python 设置要为特定结果加减的数字序列

r - 如何定义某些行序列中没有 NA 的列?

c - 通配符匹配字符串

c# - 迭代获取特定集合的所有子集

regex - 如何获取最后一个字符为 A 或 B 且倒数第二个字符为 1-360 的字符串的最后 2 个字符? (正则表达式 GREP)

python - 如何计算一个序列在 python 中的给定字符串中出现了多少次?

algorithm - 考虑 "belongingness"的集群相似曲线?

algorithm - 数据集操作