请教在MMA当中的分组问题
mathematica吧
全部回复
仅看楼主
level 2
ttdd2006 楼主
向各位请教一个问题,把1到9一次分为3个组的组合,怎么操作,不是Subset[list,3],
然后所有的分法都列举出来
比如{1,2,3}和{1,3,2}算作相同的,是组合,不是排列。
谢谢
2022年12月03日 14点12分 1
吧务
level 12
提供两种方法
1. 先枚举再筛选
Sort[Sort /@ Partition[#, 3]] & /@ Permutations[Range[9]] // DeleteDuplicates
比较好理解,但计算量很大
2. 用Complement+Subsets的方式生成
Sort /@ Nest[
Join @@ (Function[x, Append[#, x]] /@
Subsets[Complement[Range[9],
Flatten[#]], {3}] & /@ #) &, {{}}, 3] // DeleteDuplicates
计算量小很多,但代码有点绕
2022年12月04日 02点12分 2
谢谢您[大拇指]
2022年12月04日 07点12分
第二种的思路,或者解读顺序能解释下不,您有空的时候。谢谢
2022年12月04日 08点12分
level 2
ttdd2006 楼主
另外衍生出一个问题,向您请教一下
比如某个list当中,(或者这个list的某层中)重复一次的留下(或者N次的留下,或者删除)其他的反之,应该怎么处理呢?
2022年12月04日 08点12分 4
考虑Tally Counts Gather之类的
2022年12月05日 07点12分
吧务
level 9
GroupTheory`Tools`MultiSubsets[Range@9,{3,3,3}]//ArrayReshape[
#,{Length@#
,3,3}]&//DeleteDuplicatesBy[Sort]
2022年12月06日 03点12分 5
谢谢,暂时看不懂,先记下,去消化消化
2022年12月06日 04点12分
GroupTheory`Tools`MultiSubsets 这几个是要从某个包引入么? 查不到 `MultiSubsets 命令呢
2022年12月06日 07点12分
插眼,好久没看见您了[啊]
2022年12月07日 13点12分
吧务
level 9
mathematica.stackexchange.com/q/3044/2090
更快一些
ClearAll[partitions];
partitions[L_List,k_Integer]/;Mod[Length@L,k]==0:=
Nest[Join@@Table[Append[i,j],{i,#},
{j,With[{s=Complement[L,Flatten@i]},Subsets[s,{k},Binomial[Length@s-1,k-1]]]}]&,
{{}},Length@L/k];
partitions[Range@9,3]//AbsoluteTiming
2022年12月08日 10点12分 7
1