必知C++算法之排列组合基本操作
概率组合题目分类
1.高中数学为基础的古典概率计算方法
2.斐波那契数列和卡特兰数
6x9的方格,从左上角到右下角,每次只能向下或向右,一共多少种不同走法
一共13步,五步向下,剩下8步向右
组合问题C13 5= C13 8=1287种
ABCDEFG七人站队,A必须在B的左边,求不要求相邻与必须相邻有多少种排法
不要求相邻:7!/2 = 2520种
要求相邻:把AB看成一个人即可,6!=720种
六个人排成一排,要求甲与乙不相邻,并且甲与丙不相邻的排法数是多少
方法一:
6个人全排列6! = 720
甲乙相邻(甲乙看成一个人):2*5! = 240
甲丙相邻:2*5!=240
甲与乙和丙都相邻的重复减去了一份(甲乙丙看成一个人):2*4! = 48
答案:720-240-240+48 = 288种
方法二:
甲在最左侧72种
同理,右侧72种
甲在中间4个任意位置,左右两边的可从非乙丙人员的3个人中抽2个(6种)
6x3!=36种,一共4个位置,36x4=144种
总数=72+72+144 = 288种
10颗相同的糖果,分给3个人,每人至少一颗,问有多少种分法
运用隔板法:
10个糖果中间的位置为9个,插入2个隔板,分成3分即可
组合问题 故为36种
10个不同的球,放入三个桶中
每个球有3种选择,故此为3的10次方 = 59049种
有10颗糖,如果每天至少吃一颗,吃完为止,问有多少种不同的吃法
一天吃完:1种
二天吃完(用插板法):C9 1
三天吃完:C9 2
…
运用二项式定理的内容累加所有方法
2的9次方 = 512种
合法左括号与右括号问题
左括号数量为n,右括号数量为n,总排列数位C2n n
左括号设为1
右括号设为-1
可以证明,每一个非法的排列通过变换公式,都可以得到n+1个1和n-1个-1所组成的排列。
所以不合法的排列数=n+1个1和n-1个-1组成的排列数C2n n+1或者C2n n-1
合法排列数为=C2n n - C2n n+1 = 1/(n+1)*C2n n [著名的卡特兰重要公式之一 ]
n个数进出栈的顺序有多少种?假设栈容量无限大
进栈当作左括号,出栈当作右括号,即可用以上一题来解答了
2n个人排队买票,n个人拿5块钱,n个人拿10块钱,票价是5块钱一张,售票员手里没有零钱,问多少种排队方法让售票员可以顺利卖票
5块钱必须够用来找零,故此让拿5块钱的相当于左括号,拿10块钱的相当于右括号即可
求n个无差别的节点构成的二叉树有多少种不同的结构?
假设n个无差别的节点构成不同的结构数为f(n)
f(0) =1,f(1) = 1,f(2) = 2,f(3) = 5时
f(n) = f(0)xf(n-1)+f(1)xf(n-2)+f(3)xf(n-4)+…+f(n-1)xf(0) = 1/(n+1)xC2n n
卡特兰数重要公式2
12个高矮不同的人,排成两排,每排必须从矮到高,而且第二排比对应的第一排的人高,问排列有多少种
隐藏很深的卡特兰数问题
0:第一排
1:第二排
任意一个前缀不能出现1比0多的情况
有n个信封,包含n封信,现在把信拿出来,再装回去,要求每封信不能装回它原来的信封,问有多少种装法?
对于n封信按照题目要求的装法即为f(n)
假设第n封信放入了第i个信封
情况一:第i封信也放入了第n个信封中,后续为f(n-2)
情况二:第i封信没有放入第n个信封中,后续为f(n-1)
n封信放入i个信封,i的选择有n-1种
所以总数为f(n) = (n-1)x(f(n-1)+f(n-2))
必知C++算法之排列组合基本操作相关推荐
- 算法题-排列组合问题
27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3.1 3 2.2 1 3.2 3 1.3 ...
- 程序员必备算法,排列组合
还记得排列组合吗? 在高中的时候最常接触的莫过于排列组合了,毕竟高考必考的嘛.我们先来回忆下这两个的公式是啥: 排列组合公式 如果看到这个还有一丢丢的印象,说明大家的基础都还不错.那么问题来了,大家都 ...
- [算法] 求排列组合: 从n个数中任选m个数组成一个新数
#include <iostream> #include <vector>using namespace std;// 求排列组合算法: C(n, m): 从n个数中任选m个数 ...
- DFS算法模板-排列组合-python
DFS算法模板: def dfs(array or root, cur_layer, path, result):if cur_layer == len(array) or not root:resu ...
- 算法笔记 --- 排列组合
排列组合的计算公式 转载于:https://www.cnblogs.com/zhongzhiqiang/p/5809116.html
- C++经典算法题-排列组合
27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有: 1 2 3.1 3 2.2 1 3.2 3 1.3 ...
- 数学和算法之---排列组合
本文大部分内容摘自网络只是本人稍加整理分享,供大家学习交流. 排列的概念 从n个不同的元素中,任取m(m<=n)个元素按照一定的顺寻排成一列,叫做从n个不同元素中取出m个元素的一个排列.从n个不 ...
- 快速pow算法c语言_嵌入式必知基础算法(二)
七.二分法 在一个数组中,知道一个数值,想确定他在数组中的位置下标,如数组:A[5] = {1,2,6,7,9};我知道其中的值为6,那么他的下标位置就是3. 八.限幅滤波法 对于随机干扰 , 限幅滤 ...
- 算法 64式 17、排列组合算法整理
1算法思想 排列组合 1.1含义 排列: 含义:从元素列表中取出指定个数的元素进行排序 公式:从n个不同元素中取出m个元素的排列个数=n!/(n-m)! 组合: 含义:从元素列表中取出指定个数的元素, ...
最新文章
- 还搞不懂 Java NIO?快来读读这篇文章!
- ASP.Net TextBox只读时不能通过后台赋值取值
- 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')...
- django-csrftoken跨站请求伪造
- 将JSON对象带有格式的写出到文件中
- 移动互联消亡者及原因分析
- WMI-Win32_BIOS 参数说明
- LaTeX技巧005:定制自己炫酷的章节样式实例
- event.srcElement 说明 方法 技巧
- 机器学习之路: python 支持向量机 LinearSVC 手写字体识别
- 解决办法:access restriction is not accessible due to restriction
- ExtJS应用架构设计(二)
- Hibernate 泛型实现 dao 层的基类
- 三种百度网盘加速器,轻松突破10M/S,总有一款适合你!
- 知识图谱(Knowledge Graph)
- 图片怎么批量转换格式?
- java多个文件加密压缩_Java实现自动压缩文件并加密的方法示例
- 在Linux安装Kafka监控系统EFAK
- setsockopt 设置socket
- uva10635 Prince and Princess
热门文章
- REVIT建模“族类别和族参数”中的“总是垂直”“基于工作平面”怎么用?
- 并行:四种C+OpenMP计算π的并行程序
- PaaS architecture
- StackFrame
- python如何保存excel文件
- STM32驱动NRF24L01
- android5.0刷机,一加手机怎么升级安卓5.0 一加手机刷Android 5.0教程
- java模拟点击_java 模拟用户点击事件
- 会声会影如何修整剪辑视频素材
- java 过期数据_TTL过期的数据包丢失