必知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)! 组合: 含义:从元素列表中取出指定个数的元素, ...
最新文章
- 完美数据迁移-MongoDB Stream的应用
- ahk编程_AHK编程可视化的实现
- 技术部门Leader是不是一定要技术大牛担任?
- 豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!
- java 蓝桥杯 算法训练 区间k大数查询(题解)
- 批量关停azure vm_如何从Azure VM数据库运行本地SQL报表
- python开发板卡驱动开发_一款能让你发挥无限创意的MicroPython开发板—TPYBoard开发板测...
- 多维多重背包问题_动态规划--背包问题
- 51nod1712 区间求和
- RK3288 开机时间和开机速度优化安卓系统优化
- java rxtx下载_1、下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java2、下载下来的包解压后按照说明放到JAV...
- 适合java初级程序员找工作的项目
- 侦探小明:如何判断电脑里突然出现的流氓广告来自哪个软件?
- html阅读caj文件格式,caj文件怎么打开,caj转换成word(解决方案)
- 自学python就业_Python就业方向有哪些呀?适合小白学习吗?
- 微信中的dat文件到底是什么
- 权威证明共识(Proof of Authority)
- 又是一江春水自东流!
- 平板触控笔有哪些用途?超高性价比的触控笔推荐
- SELECT连表查询重复字段
热门文章
- 单元测试断言库:chai.js中文文档
- 使用Ajax传用户信息数据到后端
- python os.system()和os.popen()
- american主板网卡灯关机后还亮_七彩虹主板设置概述.pdf
- SQL Server 安全篇——SQL Server加密(1)——加密概念
- 第七次前端培训(JavaScript)
- 总结:word2007中插入页眉页脚和页码
- 如何设置Luminati Proxy Manager? Luminati+VMlogin=多个( Facebook, Google, 亚马逊,ebay)等帐号同时登录,批量管理且不被关联。
- 五金机电行业供应商智慧管理平台解决方案:优化供应链管理,带动企业业绩增长
- SMTP错误码/建议解决方法