学习排列组合总结

刚看了 一点点排列组合的书,写点总结:

首先最基本的2个 公式(貌似数学选修2-几来着有的,还有个什么二项式定理,就是求(a+b)^n展开后的东东。):

1.排列数 A(n,r)=n*(n-1)*(n-2).......*(n-r+1)=n!/(n-r)!(可以理解为从n个颜色不相同的球里取r个且取的顺序不同就算是不同的方案的方案数),另外A(n,n)=n!,有的地方A用P来表示,习惯问题罢了;证明也比较容易(自己写的,可能和标准的思路不一样,下同。): 对于第一个球,有n种取法;第二个有n-1种,第i个就有(n-i+1)种,根据乘法原理相乘就是答案 ;

2.组合数C(n,r)=A(n,r)/r!=n!/【(n-r)!*r!】;(可以理解为从n个颜色不相同的球里取r个且取的顺序不同算同一种方案的方案数)。另外C(n,n)=1; 证明可以由排列数A推来,对于任意有r个元素的排列(也就是A(r,r)),共有r!种情况。组合数其实就是排列数减去重复的部分。。r!种情况对于组合数C只能算一种,所以C(n,r)=A(n,r); 根据数学推导 还有 C(n,r)=C(n,n-r); C(n,r)=C(n-1,r)+C(n-1,k-1);这些都是带入公式即可验证;第二个特别有用,可以将乘法除法转化为加法,这样对于大数据,就只要写一个高精度加法就好了; 第二个定理的证明 还可以抽象的想:对于C(n,r),分2种情况讨论。情况一:取第一个元素,那么有C(n-1,r-1)种方案;情况二: 不取第一个元素,那么有C(n-1,r)种方案:根据加法原理两种情况加起来就是C(n,r);  拓展开去 ; 如果要求从n个颜色不相同的球里取r个且取的顺序不同就算是不同的方案的方案数,每个球拿完之后又放回盒子怎么办呢? 类似推导排列数A,取r次,每次都有n种选择,所以方案数是r^n;这就是 重复排列的公式; 再如果顺序不同只能算一种方案呢? 首先想到能不能像推导组合数C一样从排列数推来,不过。。。能不能做出来就不晓得了。。想了一节晚自习 没思路。。 百度了一下,结合紫书上的证明(哈工大出的书上坑爹的写着”证明略“),虽然方法不一样,但思想一样,下面是紫书上说的算法: 先在草稿纸上 写 r个0(同一行。。),先在第一个0前面以及最后一个0后面各划一条分割线,用n+1个条分割线将他们分成n个部分,每个部分里0的个数就是这种颜色的球取的个数;

分割线可以挨在一起,夹在中间的那部分没有0(分割线可以画在第一个0的前面也可以画在最后一个0的后面,这点书上没说明白害我搞了一节自习课。),表示这种颜色的球不取; 那么问题就转化为在r个0之间划n-1条分割线,有多少种方案。 可以把分割线看成1,那么方案数不就是 n-1个1和r个0的组合数么?n-1个1和r个0组成一个n+r-1的二进制数,把0的位置定下来了,1的位置自然也就确定了,所以又转化成n+r-1个位置上放r个0的方案数,答案就是C(n+r-1,r);这就是重复组合的公式;

小应用:

1.求方程x1+x2+x3+。。。。xr=n的非负整数解的个数; 这个不就是上面讲的 重复组合么。。(把x1,x2这些x看成上面讲的0个个数)

2. 求方程x1+x2+x3+。。。。xr=n的正整数解的个数; 这个万变不离其宗,就是2个分割线不能挨到一起了;r个0之间共有r-1个位置,在这些位置上放n-1个1;所以答案就是C(r-1,n-1);

学习排列组合总结

时间: 2024-10-01 03:49:35

学习排列组合总结的相关文章

【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度)

题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变形.(推荐阅读:http://www.cnblogs.com/chenhuan001/p/5157133.html).P.S.不知我之前自己推出的公式“C(n,m)*C(2*m,m)/(m+1)*P(n,n)*P(m,m)”是否是正确的. (1)在不考虑m人和n人本身组内的排列时,总方案数为C(m+

【程序员眼中的统计学(5)】排列组合:排序、排位、排

排列组合:排序.排位.排 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于统

iOS多线程中,队列和执行的排列组合结果分析

本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到这边文章请 点击查看原文 提到多线程,也就是四种,pthread,NSthread,GCD,NSOperation 其中phtread是跨平台的.GCD和NSOperation都是常用的,后者是基于前者的. 但是两者区别:GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行. NSO

PHP_字典序法获得排列组合

前段时间一次聚会闲聊时聊到一个问题,就是给你一排数组,例如1,2,3,4,5,如何能高效的获取上述数列的所有排列组合,正巧没事,研究了一下,一开始以为是个很简单的问题,就直接开始写代码了,后来发现怎么循环也不理想,基本上都有一些不必要的消耗,百度一下看到一个不错的算法,字典序法,顺便学习一下,然后记录之. 摘一段算法思想: 设P是[1,n]的一个全排列. P=P1P2-Pn=P1P2-Pj-1PjPj+1-Pk-1PkPk+1-Pn , j=max{i|Pi<Pi+1}, k=max{i|Pi>

算法练习:排列组合之子集合

问题描述 输入一个含有不同数字的序列,输出其所有子集合(含空集).要求:1)集合里元素有序排列:2)输出结果不含有重复集合 举例 输入序列{3,1,2} 输出:{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} 问题分析 可以使用排列组合问题求解的第一种方法:分期摊还.初始化时,结果集合里含有一个空集.当扫描数列时,保留原有集合,同时将当前元素插入现有的所在集合中,从而形成新的集合.详见后面代码的GetSubSetsAmortized函数. 也可以使用第二种方法:f

迷人的算法-排列组合

需求 最近工作中碰到一个需求:我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些”奇妙”的反应,由于不确定怎么组合,就需要将所有的组合都列出来进行尝试. 抽象一下就是从一个集合中取出任意元素,形成唯一的组合.如 [a,b,c] 可组合为 [a].[b].[c].[ab].[bc].[ac].[abc]. 要求如下: 组合内的元素数大于 0 小于等于 数组大小: 组合内不能有重复元素,如 [aab] 是不符合要求的组合: 组合内元素的位置随意,即 [ab] 和 [ba

HDU--5396(区间dp+排列组合)

做这道题的时候,想到会不会是dp,然后发现dp可做,但是一直被自己坑到死. 枚举最后合并的那个位置,然后对于加减号的,分成的前后两个部分都有不同的组合方法, (a1+a2........) +  (b1,b2.............)         对于每个a,被加b的个数的阶乘次 ,对于每个b,被加a的个数的阶乘次 减法同理 乘法特殊一点 (a1+a2........) *  (b1,b2.............)  乘法分配率,直接将两部分的总和相乘即可 想到这些还远远没有结束,因为最

排列组合

(常考)错位排列 有N封信和N个信封,每封信都不装在自己信封里的排列种数记作Dn,则 D1=0,D2=1,D3=2,D4=9,D5=44,D6=265 一.相邻问题---捆绑法 不邻问题---插空法 对于某几个元素不相邻的排列问题,可先将其他元素排好,再将不相邻元素在已排好的元素之间及两端空隙中插入即可. [例题1]一张节目表上原有3个节目,如果保持这3个节目的相对顺序不变,再添进去2个新节目,有多少种安排方法? A.20 B.12 C.6 D.4 [答案]A. [解析] 以下内容需要回复才能看

hdu 1799 (循环多少次?)(排列组合公式)

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3051    Accepted Submission(s): 1117 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算