本帖最后由 ggggwhw 于 2010-3-19 12:36 编辑
有没有什么函数可以直接输出一个集合的所有元素的不同排列,
比如原集合为arr={1,2,3,4},要求输出的结果类似于
{{1,2,3,4},
{1,2,4,3},
{1,3,2,4},
{1,3,4,2},
{1,4,2,3},
{1,4,3,2},
{2,1,3,4},
{2,1,4,3},
{2,3,1,4},
{2,3,4,1},
{2,4,1,3},
{2,4,3,1},
{3,1,2,4},
{3,1,4,2},
{3,2,1,4},
{3,2,4,1},
{3,4,1,2},
{3,4,2,1},
{4,1,2,3},
{4,1,3,2},
{4,2,1,3},
{4,2,3,1},
{4,3,1,2},
{4,3,2,1}}
要求效率相对高些,但是内存占有量不能太高,两者出现矛盾时,首先考虑内存不能太高:比如下面的代码是我现在不喜欢但是不得不用的,我想改变这种状况.-
- [code]In[1]:= arr = Range[4];
- n = Length@arr;
- Union@Select[Tuples[arr, n], Sort@# == arr &]
- Out[3]= {{1, 2, 3, 4}, {1, 2, 4, 3}, {1, 3, 2, 4}, {1, 3, 4, 2}, {1,
- 4, 2, 3}, {1, 4, 3, 2}, {2, 1, 3, 4}, {2, 1, 4, 3}, {2, 3, 1,
- 4}, {2, 3, 4, 1}, {2, 4, 1, 3}, {2, 4, 3, 1}, {3, 1, 2, 4}, {3, 1,
- 4, 2}, {3, 2, 1, 4}, {3, 2, 4, 1}, {3, 4, 1, 2}, {3, 4, 2, 1}, {4,
- 1, 2, 3}, {4, 1, 3, 2}, {4, 2, 1, 3}, {4, 2, 3, 1}, {4, 3, 1,
- 2}, {4, 3, 2, 1}}
复制代码 |