组合数学 —— 排列数
【概念】
从 n 个元素的集合 S 中,有序的选出 r 个元素,叫做 S 的一个 r 排列,不同的排列总数记作: 或
如果两个排列所含元素不全相同,或所含元素相同但顺序不同,就会被认为是不同的排列。
【可重排列】
从 n 个不同元素可重复的取出 m 个元素,按照一定顺序排成一列,叫做相异元素可重复排列。
相异元素可重复排列的方案数为:
例如:从1、2、3、4、5 中任取三个出来组成一个三位数,有 P(5,3)=60 种情况,如果每个数字可以重复使用,则有:5^3=125 种情况
【不可重排列】
不可重排列是指在 n 个不同元素中选 r 个元素按照顺序排成一列。
1.选排列
从 n 个不同元素取出 r 个元素,按照一定顺序排成一列,当 r<n 时,叫做从 n 个不同元素取出 r 个不同元素的一种选排列。
使用乘法原理,可以推出选排列 的方案数:
模版:输入两个整数 n、r,输出 A(n,r) 的所有方案
int n,r;
int data[N];
int vis[N];
void Done(int i){if(i==r){//若相等,说明已经生成一个排列for(int j=0;j<r-1;j++)//输出排列printf("%d",data[j]+1);printf("%d\n",data[r-1]+1);return;//回溯寻找下一种排列}for(int j=0;j<n;j++){if(!vis[j]){//若没有在该排列前面出现过vis[j]=true;data[i]=j;//该位置上就选择jDone(i+1);vis[j]=false;}}
}
int main(){memset(vis,false,sizeof(vis));scanf("%d%d",&n,&r);Done(0);return 0;
}
2.全排列
从 n 个不同元素取出 r 个元素,按照一定顺序排成一列,当 r=n 时,叫做 n 个不同元素的全排列。
全排列 的方案数:
C++ 中,头文件<algorithm> 里的 next_permutation() 函数,可产生字典序的全排列。
关于 next_permutation() 函数:点击这里
如下,给出从一组全排列的情况,使用 next_permutation() 函数可以生成下一种的全排列的情况,因此一般先使用 sort() 进行排序,即可生成所有全排列的情况。
int a[N];
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);do{for(int i=0;i<n;i++)printf("%d ",a[i]);printf("\n");}while(next_permutation(a,a+n));return 0;
}
【不全相异排列】
1.不全相异元素的选排列
若在 n 个元素中,有 个元素彼此相同,
个元素彼此相同,...,
个元素彼此相同,且
,则这 n 个元素选出 r 个的选排列叫做不全相异元素的选排列。
其排列数计算公式为:
2.不全相异元素的全排列
若在 n 个元素中,有 个元素彼此相同,
个元素彼此相同,...,
个元素彼此相同,且
,则这 n 个元素的全排列叫做不全相异元素的全排列。
其排列数计算公式为:
【错位排列】
设 是
的一个全排列,若对任意的
都有
,则称
是
的错位排列。
用 表示
的错位排列的个数,有:
例题:书架上有 6 本书,编号为 1-6 ,取出来再放回去,要求每本书都不在原来的位置上,有多少种放法?
分析:本题是要求 1-6 的错位排列,使用容斥原理有:
【圆排列】
从 n 个不同元素中选取 r 个元素,不分首尾地围成一个圆圈的排列叫做圆排列,其排列方案数为:
当 r=n 时,则为圆排列的全排列,其排列方案数为:
例题:有男女各 5 人,其中有 3 对夫妇,沿 10 个位置的圆桌就座,若每对夫妇都要坐在相邻的位置上,有多少种坐法?
分析:先让 3 对夫妇中的妻子和其他 4 人就坐,根据圆排列公式,共有 7!/7=6!种坐法,然后每位丈夫都可以做到自己的妻子左右两边,因此共有 6!*2*2*2=5760 种坐法。
【例题】
- 排列2(HDU-1716)(全排列):点击这里
- Reconciled?(AtCoder-2642)(全排列):点击这里
- 火星人(洛谷-P1088)(next_permutation() 函数):点击这里
- 重排列得到2的幂(51Nod-2515)(next_permutation() 函数+打表):点击这里
- Hard to prepare(2018 ACM-ICPC 徐州赛区网络赛 A)(环形排列+递推):点击这里
- permutation 1(HDU-6628)(全排列+思维):点击这里
组合数学 —— 排列数相关推荐
- 【算法】组合数学——排列数生成算法详解(一)
组合数学中的全排列深成算法历来是组合数学考试的重要考察点,因此在这里我简单的介绍一下6种全排列生成算法的详细过程,并借此比较它们之间的优劣之处. 不论是哪种全排列生成算法,都遵循着"原排列& ...
- 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )
文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni≥r ) 四.多重集非全排列 2 某些元素重复度小 ...
- 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )
文章目录 一.指数生成函数 二.排列数指数生成函数 = 组合数普通生成函数 三.指数生成函数示例 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常 ...
- 组合数学-排列组合整理
此文是我整理组合数学排列组合知识的博文,排列组合从零开始...加油! 1.重复组合: 从n种不同元素中取出m的元素(方法是从n个元素中每次取出一个后,放回,再取另外一个,直到取出m个元素),每一种元素 ...
- 组合数学--排列组合
组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...
- 组合数学——排列组合经典模型
组合数学--排列组合经典模型 球盒模型 n n n个不同的球放入 m m m个相同的盒子里面,盒子不允许为空 这和第二类斯特林数的定义相同,答案为 { n m } {n \brace m} {mn} ...
- python【蓝桥杯vip练习题库】ADV-188排列数
试题 算法提高 排列数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一 ...
- 46. Permutations 排列数
46. Permutations 题目 Given a collection of distinct numbers, return all possible permutations.For exa ...
- 排列组合思维导图_排列组合——排列数专题
在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...
最新文章
- S01E05 Android体系结构
- Mybatis是如何实现SQL语句复用功能的?
- ACM新手之八大输入输出格式
- python基础教程:global的用法
- 64位系统好不好用java_64位系统环境时Java的性能
- 终于有人把 Spring 循环依赖讲清楚了!
- 傲腾服务器系统,英特尔傲腾加速 释放数据价值
- jquery html5引导页,jQuery插件实现的页面功能介绍引导页效果
- 字符串在JVM中如何存放 及常量池技术
- 防止各大网盘下载限速解决方案--idman
- vue实现导出excel
- 利用BioEdit做多序列一致性比对
- CS5211|EDP转LVDS方案介绍|CS5211电路设计
- 模拟IP转发分组实验 C++ Vector
- 间歇性禁食 肠道菌群 心血管代谢疾病
- 如何二叉树里面查找一个数
- 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD)
- 惠普暗影精灵4笔记本如何U盘重装系统教学
- 超硬核的Java工程师分享,什么是Java?为什么我要做Java,我是如何学习Java的?
- 汇编指令-CMP、TEQ