Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 生成包含整数的数组(置换)的数学方法_Arrays_Math_Integer Arithmetic - Fatal编程技术网

Arrays 生成包含整数的数组(置换)的数学方法

Arrays 生成包含整数的数组(置换)的数学方法,arrays,math,integer-arithmetic,Arrays,Math,Integer Arithmetic,我需要一个数学函数来生成包含某些整数的所有变体的数组,即所谓的置换,例如: private static final int[][] a = {{1}}; private static final int[][] b = {{1,2},{2,1}}; private static final int[][] c = {{1,2,3},{3,2,1},{2,1,3},{3,1,2},{1,3,2},{2,3,1}}; private static final int[][] d = {{1,2,3

我需要一个数学函数来生成包含某些整数的所有变体的数组,即所谓的置换,例如:

private static final int[][] a = {{1}};
private static final int[][] b = {{1,2},{2,1}};
private static final int[][] c = {{1,2,3},{3,2,1},{2,1,3},{3,1,2},{1,3,2},{2,3,1}};
private static final int[][] d = {{1,2,3,4},{1,2,4,3},...};
如果可以管理的话,应该可以生成多达100{{1,2,3,….100},{…}或更多的数组

你知道能产生这种数组的公式或算法吗?

对于包含{1..k}的数组,您可以遵循这里给出的算法(将每个置换复制到一个新数组中),并对{1..k+1}执行相同的操作,依此类推

然而,可能有一种更有效的方法,因为{1..k}的可能性是{1..k-1}的结果,其中k插入到每个可能的位置


但是,考虑一下你打算用它们做什么。如果只需要一些排列,则不需要将它们全部存储在内存中,因此可以修改函数以仅返回第n个排列,或者实现一个迭代器,该迭代器不复制数组,然后让调用代码决定何时复制。你肯定不能储存100个!大小为100的数组。如果我的数学是正确的,对于N=12,您已经在谈论超过20GB的空间来存储所有这些数据(甚至不包括最多N-1的数据)。

我想可以采用
for
-循环算法。对,这是一种排列,因为您关心顺序。如果你不这么做,那就是一个组合。关于生成置换的地址还有其他问题,但在我看来,WP上列出的算法非常简单。一旦你有一个函数返回[1..k]的排列,你就可以从k=2循环到最大数。