引论
分拆可以看我的这篇文章
在线的Combinatorica`程序包文档可以看这个
在线的Combinatorica/guide/PartitionsAndCompositions可以看这个
步骤
这里使用Mathematica 12.0进行演示
0x00 导入程序包
Needs[ "Combinatorica`"]
如果报Warning了不管它,可以继续使用
之后可以?Combinatorica`*
查看包里的内容及用法
下面混用程序包里的函数和mma12.0自带的函数进行演示
0x01 Partitions
全部方案
Partitions[5](*全部方案*)
IntegerPartitions[5](*全部方案,和上面的几乎一样*)
和数被限制
Partitions[5, 3](*和数最大是3,逆字典序陈列出来*)
IntegerPartitions[10, All, {2, 3, 4}](*和数只能是2,3,4*)
和数数目被限制
IntegerPartitions[5, 3](*最多3部分*)
IntegerPartitions[5, {3}](*刚好3部分*)
IntegerPartitions[5, {2, 4}](*最少2部分,最多4部分*)
Flatten[Table[IntegerPartitions[10, {k}] , {k, {2, 4}}], 1] (*和数个数只能是2,4*)
由一种Partition方案绘制FerrersDiagram
FerrersDiagram[Partitions[10] [[18]]] (*参数换成 {5, 2, 1, 1, 1} 也行*)
FerrersDiagram的转置
FerrersDiagram@TransposePartition[Partitions[10][[18]]]
Ferrers图按照规则填上合适的数就成为了YoungTableau(这里的Tableau是转置过的,不知道怎么转过来)
TableForm[Tableaux[{3, 1}], TableAlignments -> {Right, Top}]
0x02 Compositions
全部方案
IntegerCompositions[n_]:=Flatten[Table[Compositions[n, k], {k, 1, n}], 1] (*全部方案,这个我没找到现成的函数*)
和数受限制
len = Length@Partitions[5, 3];
Flatten[ Table[Permutations[Partitions[5, 3][[k]]], {k, 1, len}] , 1]
(*和数最大是3*)
len = Length@IntegerPartitions[10, All, {2, 3, 4}];
Flatten[Table[
Permutations[IntegerPartitions[10, All, {2, 3, 4}][[k]]], {k, 1,
len}], 1]
(*和数只能是2,3,4*)
和数数目受限制
Compositions[10, 3](*正好3部分*)
NumberOfCompositions[10, 3](*正好3部分的方案数目*)
Length@Compositions[10, 3](*正好3部分的方案数目,和上面几乎一样*)
Flatten[Table[Compositions[10, k], {k, 1, 5}], 1] (*最多5部分的全部方案,这个我没找到现成的函数*)
Flatten[Table[Compositions[10, k], {k, {2, 3, 5}}], 1] (*和数个数只能是2,3,5的全部方案,这个我没找到现成的函数*)
Log
upd 2021-03-30 完成初稿