我有一个数组U,数组D的长度不同。我需要能够返回数组索引的所有排列,这些排列将从每个集合中选择一个由1个元素组成的不同排列。我还要求将此算法表示为仅记住最后一个排列的对象,并使用get_next方法返回下一个排列。
U
D
例如,U = [array_of_size_n1, array_of_size_n2, array_of_size_n3]将存在n1*n2*n3排列,每个排列长 3个 元素。
U = [array_of_size_n1, array_of_size_n2, array_of_size_n3]
n1*n2*n3
编辑: 套数也有所不同。
如果您使用的是python,则这是标准库的一部分:itertools.product。但是,假设您不是,这里是伪代码版本。
itertools.product
// Create an initialised array of indexes. int[] index0(arrays) { // We require all arrays to be non-empty. for a in arrays { assert len(a) != 0; } return new int[len(arrays)]; } // Increment the indices. Returns false when the indices wrap round to the start. bool next_index(indices, arrays) { for (i = len(indices) - 1; i >= 0; --i) { indices[i] += 1 if indices[i] < len(arrays[i]) { return true; } indices[i] = 0; } return false; }
您可以像这样使用它(假设所有数组都不为空)。本示例打印出数组中元素的每种组合。
indices = index0(arrays); { for (i = 0; i < len(arrays); ++i) { print arrays[i][indices[i]]; } print } while next_index(indices);