找回密码
 注册
Simdroid-非首页
查看: 202|回复: 5

[编程进阶] 什么函数可以输出一个集合所有元素的不同排列

[复制链接]
发表于 2010-3-19 12:25:34 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 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}}
要求效率相对高些,但是内存占有量不能太高,两者出现矛盾时,首先考虑内存不能太高:比如下面的代码是我现在不喜欢但是不得不用的,我想改变这种状况.


  1. [code]In[1]:= arr = Range[4];

  2. n = Length@arr;

  3. Union@Select[Tuples[arr, n], Sort@# == arr &]

  4. Out[3]= {{1, 2, 3, 4}, {1, 2, 4, 3}, {1, 3, 2, 4}, {1, 3, 4, 2}, {1,
  5. 4, 2, 3}, {1, 4, 3, 2}, {2, 1, 3, 4}, {2, 1, 4, 3}, {2, 3, 1,
  6. 4}, {2, 3, 4, 1}, {2, 4, 1, 3}, {2, 4, 3, 1}, {3, 1, 2, 4}, {3, 1,
  7. 4, 2}, {3, 2, 1, 4}, {3, 2, 4, 1}, {3, 4, 1, 2}, {3, 4, 2, 1}, {4,
  8. 1, 2, 3}, {4, 1, 3, 2}, {4, 2, 1, 3}, {4, 2, 3, 1}, {4, 3, 1,
  9. 2}, {4, 3, 2, 1}}
复制代码
 楼主| 发表于 2010-3-19 12:33:22 | 显示全部楼层 来自 北京
Simdroid开发平台
下面的情况来验证你的代码还正确吗?
arr={1,1,2,3}时,
要求输出结果类似于:
{{1, 1, 2, 3}, {1, 1, 3, 2}, {1, 2, 1, 3}, {1, 2, 3, 1}, {1, 3, 1,
  2}, {1, 3, 2, 1}, {2, 1, 1, 3}, {2, 1, 3, 1}, {2, 3, 1, 1}, {3, 1,
  1, 2}, {3, 1, 2, 1}, {3, 2, 1, 1}}
参考代码:
  1. In[30]:=
  2. arr = {1, 1, 2, 3};
  3. n = Length@arr;
  4. Union@Select[Tuples[arr, n], Sort@# == arr &]

  5. Out[32]= {{1, 1, 2, 3}, {1, 1, 3, 2}, {1, 2, 1, 3}, {1, 2, 3, 1}, {1,
  6.   3, 1, 2}, {1, 3, 2, 1}, {2, 1, 1, 3}, {2, 1, 3, 1}, {2, 3, 1,
  7.   1}, {3, 1, 1, 2}, {3, 1, 2, 1}, {3, 2, 1, 1}}
复制代码
回复 不支持

使用道具 举报

发表于 2010-3-19 12:33:39 | 显示全部楼层 来自 江苏苏州
排列

  1. Permutations[Range[4]]
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-20 08:13:28 | 显示全部楼层 来自 北京
FreddyMusic 三楼给的代码好像是我想要的Mathematica 专为排列给出的函数,但是Permutations只能用在最多10个不同元素上,好像有些少哦.而且也是很占内存的.
而我给出的代码好像只能给出6至7个元素的情况,而且我的代码在占用内存方面是不区分元素是否相同的.就这一点而言Permutations相对好些,但是我觉得10个元素似乎有些少.
回复 不支持

使用道具 举报

发表于 2010-3-20 09:29:49 | 显示全部楼层 来自 北京海淀
元素多了排列数肯定多,占内存多也是必然的啊
回复 不支持

使用道具 举报

发表于 2010-3-20 10:01:42 | 显示全部楼层 来自 上海宝山区
J is right for Permutations, but we can reorgnized the data into smaller group and feed the memory slowly.
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-7 03:51 , Processed in 0.036632 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表