【概念】

从 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)(全排列+思维):点击这里

组合数学 —— 排列数相关推荐

  1. 【算法】组合数学——排列数生成算法详解(一)

    组合数学中的全排列深成算法历来是组合数学考试的重要考察点,因此在这里我简单的介绍一下6种全排列生成算法的详细过程,并借此比较它们之间的优劣之处. 不论是哪种全排列生成算法,都遵循着"原排列& ...

  2. 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )

    文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni​≥r ) 四.多重集非全排列 2 某些元素重复度小 ...

  3. 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )

    文章目录 一.指数生成函数 二.排列数指数生成函数 = 组合数普通生成函数 三.指数生成函数示例 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常 ...

  4. 组合数学-排列组合整理

    此文是我整理组合数学排列组合知识的博文,排列组合从零开始...加油! 1.重复组合: 从n种不同元素中取出m的元素(方法是从n个元素中每次取出一个后,放回,再取另外一个,直到取出m个元素),每一种元素 ...

  5. 组合数学--排列组合

    组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...

  6. 组合数学——排列组合经典模型

    组合数学--排列组合经典模型 球盒模型 n n n个不同的球放入 m m m个相同的盒子里面,盒子不允许为空 这和第二类斯特林数的定义相同,答案为 { n m } {n \brace m} {mn​} ...

  7. python【蓝桥杯vip练习题库】ADV-188排列数

    试题 算法提高 排列数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一 ...

  8. 46. Permutations 排列数

    46. Permutations 题目 Given a collection of distinct numbers, return all possible permutations.For exa ...

  9. 排列组合思维导图_排列组合——排列数专题

    在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...

最新文章

  1. S01E05 Android体系结构
  2. Mybatis是如何实现SQL语句复用功能的?
  3. ACM新手之八大输入输出格式
  4. python基础教程:global的用法
  5. 64位系统好不好用java_64位系统环境时Java的性能
  6. 终于有人把 Spring 循环依赖讲清楚了!
  7. 傲腾服务器系统,英特尔傲腾加速 释放数据价值
  8. jquery html5引导页,jQuery插件实现的页面功能介绍引导页效果
  9. 字符串在JVM中如何存放 及常量池技术
  10. 防止各大网盘下载限速解决方案--idman
  11. vue实现导出excel
  12. 利用BioEdit做多序列一致性比对
  13. CS5211|EDP转LVDS方案介绍|CS5211电路设计
  14. 模拟IP转发分组实验 C++ Vector
  15. 间歇性禁食 肠道菌群 心血管代谢疾病
  16. 如何二叉树里面查找一个数
  17. 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD)
  18. 惠普暗影精灵4笔记本如何U盘重装系统教学
  19. 超硬核的Java工程师分享,什么是Java?为什么我要做Java,我是如何学习Java的?
  20. 汇编指令-CMP、TEQ

热门文章

  1. ChatGpt的出现,前端真的会失业吗?
  2. 系列文章丨阿法狗 ZERO为什么这么强之Nature讲解
  3. 小米路由器R2D安装Misstar Tools2.0教程
  4. 十七届全国大学生智能车竞赛华北赛区开幕式议程
  5. 埋点及数据采集系统简介
  6. Ubuntu设置国内镜像
  7. elementUI 动态渲染三级菜单
  8. 开源AIOps工具与专有AIOps工具大比拼
  9. 数智化时代企业研发的4阶段演进趋势
  10. python射线法判断点是否在多边形内