必知C++算法之排列组合基本操作

风流意气都作罢 提交于 2020-01-23 18:58:03

概率组合题目分类

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))

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!