怎样遍历限制了部分顺序的全排列

update: 之前的答案存在一个错误,现在所有的 怎样遍历限制了部分顺序的全排列
符号都替换成 怎样遍历限制了部分顺序的全排列
了 。 对本题而言, 怎样遍历限制了部分顺序的全排列
其实没有对 怎样遍历限制了部分顺序的全排列
的相对位置有任何限制,题目只要求小的数必须在前。所以限制条件中的 怎样遍历限制了部分顺序的全排列
关系,我们可以全部忽略。另外也只有当二元关系是 怎样遍历限制了部分顺序的全排列
这样的严格偏序关系时,才能同一个有向无环图对应(对非严格偏序关系,我们也可以加上额外的条件来使其严格偏序,比如对 怎样遍历限制了部分顺序的全排列
要求大小相同时下标更小的在前)。
————————————
先当个计数问题来看吧,假设所有元素的集合 怎样遍历限制了部分顺序的全排列
,集合 怎样遍历限制了部分顺序的全排列
表示已知的顺序关系,这里 怎样遍历限制了部分顺序的全排列
表示 怎样遍历限制了部分顺序的全排列
。分两种情况:
1.集合B可以分解成一系列的全序关系 比如: 怎样遍历限制了部分顺序的全排列

2.集合B中存在偏序关系 比如: 怎样遍历限制了部分顺序的全排列
我们不知道怎样遍历限制了部分顺序的全排列
的关系
情况1比较简单:
这种情况只是all permutations of multiset的变体,想想看集合{a,b,c,d,e}在限制顺序 b,c,e下的全排列同多重集{a,b,b,d,b}的全排列个数是相同的,都是 怎样遍历限制了部分顺序的全排列
。
note:对于由k种元素组合成的n元多重集,其全排列是 怎样遍历限制了部分顺序的全排列
,这里 怎样遍历限制了部分顺序的全排列
表示第i种元素重复的次数。
【怎样遍历限制了部分顺序的全排列】 我们只需要把集合S里在B中通过比较符号关联的元素当作同一种元素就可以得到一个对应的多元集,集合S在限制条件B下合法的排列个数就是这个多元集全排列的个数。

情况2要复杂些:
比如就 怎样遍历限制了部分顺序的全排列
而言我们不知道 怎样遍历限制了部分顺序的全排列
的关系,这意味着 怎样遍历限制了部分顺序的全排列
合法的排列顺序不止一种。那么有多少种?注意到偏序关系对应有向无环图,说到给有向无环图的节点排序,那当然就是拓扑序了。所以怎样遍历限制了部分顺序的全排列
的合法排序个数就是拓扑序的个数。
集合S在限制条件B下的全排列个数应该是:以S为顶点集合,B为边集合所构成的图G(有向无环图)的全部拓扑序的个数,也可以先按照方法1求出对应多元集的全排列个数,然后分别乘以图G中每个连通分量的拓扑序个数。


推荐阅读