圆排列、循环排列、斯特林数、stirling

本文探讨了圆排列的概念,分别阐述了size为n和m的圆排列情况,并涉及对称圆排列的讨论。此外,文章深入介绍了斯特林数中的第一类,通过例题帮助理解其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

圆排列

圆排列 又称循环排列,他是一个“二维形状”,构成空间上的一个 圆形
  每个圆排列,都对应有“多个”直线排列
  比如,某个圆排列的size是4,那么他就有4个“直线排列”

因为,比如某个直线排列是abcd
  ' 所谓圆排列,即把abcd这个直线排列,“均匀”的放到一个圆上 '
那么,这个圆排列 所对应的直线排列有: abcd、bcda 、cdab 、dabc
“即,圆排列看的是:  这n个元素间的 相对位置  ”

2个圆排列相同:
 1, 元素个数相同
 2, 这n个元素 的 相对问题,都相同 
     a 				d
 e      b   和   c      e  , 这俩是 同个 圆排列
   d   c		  b   a



size为n的圆排列

从n个元素中,选出一个“size为n”的圆排列,问能得到多少种不同的圆排列。

比如n=4:
   第1个圆排列:  abcd、bcda、cdab、dabc  ' 这都对应同一个圆排列 '2个圆排列:  abdc、bdca、cabd、dcab  ' 这都对应同一个圆排列 '3个圆排列:  acbd、b...、c...、d...4个圆排列:  acdb、b...、c...、d...5个圆排列:  adbc、b...、c...、d...6个圆排列:  adcb、b...、c...、d...
  
方式11个全圆排列(size=n) 对应  n个直线排列
	而,n个元素 有n!个直线排列 
	故,有 n! / n = (n-1)! 个 全圆排列
  
方式2:
	每个圆排列,他所对应的“直线排列”,都是n个形如:“a...、b...、c...、d...”
	所以,只看第一个a...  则有(n-1)! 个全圆排列

size为m的圆排列

从n个元素中,选出一个“size为m”的圆排列,问能得到多少种不同的圆排列。

比如n=4、m=3:
   第1个圆排列:  abc、b..、c..  ' 这都对应同一个圆排列 '2个圆排列:  acb、c..、b.. ' 这都对应同一个圆排列 '3个圆排列:  abd、b..、d..4个圆排列:  adb、........5个圆排列:  acd、........6个圆排列:  adc、........7个圆排列:  bcd、cdb、dbc ' 注意这里非常重要!! 与上面不同 '8个圆排列:  bdc、dcb、cbd ' 这2项是没有a元素的!! 你很容易把这2给忘掉... '

n个元素 他有A(n, m)个 “长度为m的 直线排列”,注意别写成C(n,m)
这个A(n,m),就对应为上面的这么多项!!! 
即,所以长度为m 的排列。  然后3个一组,所以 A(n,m) / m

一个size=m的圆排列,他有: m个 长度为m的 直线排列
即这个问题的 圆排列数为:  A(n, m) / m   

对称圆排列

在普通的圆排列中, 
    a 				a
 e      b   和   b      e  是不同的圆排列
  d   c			  c   d

但是,如果我们规定:  不考虑“顺逆时针”(换句话说: 允许 镜像/对称 匹配)
  ' 上面两个图形, 是“镜像”对称的。 所以,属于同个 对称圆排列 '

即,镜像对称左L: 有m个 圆排列
    镜像对称右R: 有m个 圆排列    ' 注: L和R 不是同个 圆排列 '
 
故,在普通的基础上, 多了2倍, 只需在求圆排列后, 除以2即可
故:n个元素,有:  A(n, m) / m / 2个 (size=m的)对称圆排列

斯特林数 - 第一类

将n个元素,划分成 m个 “非空”圆排列 的方案数
   ' 注意,不是选出m个数,而是划分成m个集合。 即:每种方案,都有n个元素 '
   ' 这m个圆排列之间,不存在排列顺序问题 '
1 <= m 
### 第一类斯特林的定义与计算 第一类斯特林(Signed Stirling numbers of the first kind 或 Unsigned Stirling numbers of the first kind)是组合学中的重要工具之一,主要用于描述排列分解成若干不相交循环的方式量。具体来说,它表示将 \(n\) 个不同元素划分为 \(k\) 个非空循环排列的方法目。 #### 定义 第一类斯特林通常记作 \([n, k]\),其中: - 如果考虑带符号的第一类斯特林,则其可以用来表达下降阶乘多项式的系。 - 不带符号的第一类斯特林则直接计划分方式的量[^1]。 对于正整 \(n\) 和 \(k\),\(|S_1(n, k)|\) 表示的是把 \(n\) 个对象分成 \(k\) 个环状排列的不同方法总。而有符号版本会引入交替符号来适应某些特定代结构下的需求。 #### 性质 以下是关于第一类斯特林的一些基本性质: - 当 \(n = k\) 时,显然只有一种可能的情况——即每个单独的对象构成自己的一个长度为一的圈;因此我们得到边界条件\[|S_1(k,k)|=1.\] - 若试图构建少于实际可分组情况或者超出合理范围内的分区方案都是不可能完成的任务,所以当\(k>n\)或\(k<0\)的时候,\( |S_1(n,k)|=0 .\)[^2] #### 计算法则 通过递推关系能够有效地求解这些值: 设无符号第一类斯特林满足如下递归公式: \[ S_1(n , k )=(n−1)\times{}S_1((n−1),k)+S_1((n−1),(k−1)) \] 这里体现了两种情形:要么新加入的一个成员自己形成一个新的独立周期,这对应着后者项;或者是被插入到已存在的某个现有周期之中去扩展之,这就关联到了前者那一部分贡献因子。(n − 1)代表了可供选择的位置点位[^3]. 下面给出基于上述公式的简单C++实现代码片段: ```cpp #include <bits/stdc++.h> using namespace std; long long stirling_first_kind(int n, int k){ vector<vector<long long>> dp(n+1,vector<long long>(k+1)); for (int i = 0;i<=n;i++) { for (int j = 0;j<=min(i,k);j++){ if(j==0 || j ==i ){ dp[i][j]=1; } else{ dp[i][j]=(i-1)*dp[i-1][j]+dp[i-1][j-1]; } } } return dp[n][k]; } // Example usage int main(){ cout<<stirling_first_kind(5,2)<<endl;// Output should be 50 according to definition and properties. } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值