【算法复习四】计算复杂性与算法分析---组合数学知识汇总

一,组合数学问题

        1)排列定义  

            n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。

            排列的全体组成的集合用P(n,r)表示。当r=n时称为全排列。

 

            组合定义  

              定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。

              组合的全体组成的集合用C(n,r)表示。

        

       2)例题一某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少?

 

          【解法一进站方案表示成:

                       00011001010100

           其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。给“1”n个门只用n-1个门框。任意进站方案可表示成上面14个元素的一个排列。

           [解法1]

                    分析:第一个人可以有6种进站的方式,也就是从6个入口的任意一个站进站,那么第二个人也可以有6种选择入口的方法,但是假如他和第一个人选择的入口是相同的话,就有谁在前的情况,所以第二个人就有了7种进站方案;同理,第三个人进站的话就有8种进站方案,这样算下去,那么第九个人就有14种进站的方法。

             

                  故所求方案为   14!/5!=6×7×8×...×14=726485720  

         [解法2]

                   在14个元的排列中先确定“1”的位置,有C(14,5)种选择,在确定人的位置,有9!种选择。

           故 C(14,5)*9! 即所求:14!/5! 

                   注意:C(14,5)= (14! - (14-5)!)/ 5!

                   如:a10 a3 a40 a6 a70 a9 a100 a120 a14

                   方案为(2,5,8,11,13

        

         例题二简单格路径数问题 (类腾讯笔试题)

               从 (0,0)点出发沿x轴或y轴的正方向每步走一个单位,最终走到(m,n)点,有多少条路径?

              【分析】无论怎样走法,在x方向上总共走m步,在y方向上总共走n步。若用一个x表示x方向上的一步,一个字母y表示y方向上的一步。

                            则(0,0)→(m,n)的每一条路径可表示为mxny的一个有重排列。将每一个有重排列的xy分别编号,可得m!*n!m+n元的无重全排列。

              【分析】向上可以走m步,向右可以走n步。注意,必须向上走m步,向右走n步才能到达(m,n)

                          只需要考虑上和右依次在哪里出现,所以不难得出答案  C(m+n,n)=C(m+n,m)

 

        3)容斥原理

             最简单的计数问题是求有限集合AB的并的元素数目。显然有

             • 定理即具有性质AB的元素的个数等于具有性质AB的元素个数。

         求a,b,c,d,e,f六个字母的全排列中不允许出现acedf图象的排列数。

        解:设Aace作为一个元素出现的排列集,Bdf作为一个元素出现的排列集, A∩B为同时出现ace、df的排列数。

                • |A|=4|B|=5 |A∩B|=3

                  |A∩B|= 6!- (5!+4!)+3!=582

       4) 容斥与鸽巢原理

              鸽巢原理之一: 鸽巢原理是组合数学中最简单也是最基本的原理,也叫抽屉原理。即“若有n个鸽子巢,n+1个鸽子,则至少有一个巢内有至少有两个鸽子。”

                   • 367人中至少有2人的生日相同。

                   • 10双手套中任取11只,其中至少有两只是完整配对的。

                   • 参加一会议的人中至少有2人认识的别的参加者的人数相等。

 

             鸽巢原理之二:m1 , m2 , … , mn都是正整数,并有m1 + m2 +… +mn-n + 1个鸽子住进n个鸽巢,则至少对某个 i有第 i个巢中至少有mi个鸽子,i = 1 , 2 , … , n.

                   •显然,鸽巢原理之一是鸽巢原理之二的特殊情况,即m1 = m2 = … = mn= 2,如若不然,则对任意 i, 都有第i个巢中的鸽子数≤mi-1 则,鸽子总数≤ m1 + m2 +… +mn-n,与假设相矛盾.

             

              例题一:拉蒙赛(Ramsey问题

                            6 个人中至少存在3人相互认识或者相互不认识

                           •证:这个问题与凸六边形完全图的内边着二色,存在同色三角形等价.假定用红蓝着色

                           • 六边形完全图的顶点集为{v1, v2 , ··· , v6 },dr(v)示与顶点v 关联的红色边的条数,db(v)示与v 关联的蓝色边的条数.在六边形完全图中,有dr(v)+db(v)=5,由鸽巢原理可知,至少有3条边同色.

    

             例题二:拉丁方

                         1,2,3..,n构成的nn方阵aijnn

                        要求:每行每列1,2,3..,n各出现一次。称为拉丁方。

 

二,生成函数

          生成函数定义

              对于序列a0,a1,a2,a3,a4……构造一函数:G(x) = a0 + a1x + a2x`2 + ……称函数G(x)是序列a0,a1,a2,a3,a4……的生成函数。

              •例如:(1+x)`n是C(n,0),C(n,1),C(n,2)……C(n,n)的生成函数。

              •如若已知序列a0,a1,a2,a3,a4……则对应的生成函数G(x)便可根据定义给出。反之亦然。

            例题:由红球两个,白球、黄球各一个,试求有多少种不同的组合方案

           一个球:3

           二个球:4

           三个球:3

           四个球:1      总共:12种

 

三,指数型生成函数

 

         指数型生成函数的概念

              设有n个元素,其中元素a1重复了n1 次,元素a2重复了n2 次,…,ak重复了nk次,从中取r个排列,求不同的排列数.

             如果n1 = n2 = n3 = …… nk = 1,则是一般的排列问题。

          现在由于出现重复,故不同的排列计数便比较复杂。先考虑n个元素的全排列,n个元素没有完全一样的元素,则应有n!  种排列。若考虑ni 个元素ai 的全排列数为ni!,则真正不同的排列数为  n! /(n1!*n2!*……nk!)

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 引论 1.1 组合数学研究的对象 1.2 组合问题典型实例 1.2.1 分派问题 1. 2.2 染色问题 1.2.3 幻方问题 1.2.4 36军官问题 1.2.5 中国邮路问题 习 题 第二章 排列与组合 2.1 两个基本计数原理 2.2 无重集的排列与组合 2.3 重集的排列与组合 2.4 排列生成算法 2.4.1 序数法 2.4.2 字典序法 2.4.3 轮转法 2.5 组合生成算法 .2.6 应用举例 习 题 第三章 容斥原理 3.1 引 言 3.2 容斥原理 3.3 几个重要公式 3.4 错位排列 3.5 有限制的排列 3.6 棋阵多项式 3.7 禁位排列 习 题 第章 鸽巢原理 4.1 鸽巢原理 4. 2 鸽巢原理的推广形式 4. 3 ramsey数 4.4 ramsey数的性质 4.5 ramsey定理 习 题 第五章 母函数 5.1 母函数概念 5.2 幂级数型母函数 5.3 整数的拆分 5.4 ferrers图 5.5 指数型母函数 习 题 第六章 递归关系 6.1 引言 6.2 几个典型的递归关系.. 6.3 用母函数方法求解递归关系 6.4 常系数线性齐次递归关系的求解 6.5 常系数线性非齐次递归关系的求解 6.6 非常系数非线性递归关系的求解 6.7 差分表法 6.8 stirling数 习 题 第七章 polya定理 7.1 有限集的映射 7.2 群的基本概念 7.3 置换群 7.4 置换的奇偶性 7.5 置换群下的共轭类 7.6 burnside引理 7.7 polya定理 7.8 polya定理的母函数型式 7.9 不标号图的计数 习 题 第八章 图论基础 8.1 图的基本概念 8.2 同构图、完全图与二分图 8.3 通路、回路与图的连通性 8.4 euler图与hamilton图 8.5 割集与树 8.6 图的矩阵表示法 8.7 平面图、对偶图与色数 8.8 匹配理论 8.9 网络流 习 题 第九章 拉丁方与区组设计 9.1 引言 9.2 拉丁方 9.3 有限域 9.4 正交拉丁方的构造 9.5 完全区组设计 9.6 平衡不完全区组设计(bibd) 9.7 区组设计的构造 9.8 steiner三连系 9.9 hadamard矩阵 习 题 第十章 线性规划 10.1 lp问题引例 10.2 lp问题的一般形式 10.3 lp问题的标准型 10.4 可行域和最优可行解 10.5 单纯形法 10.6 单纯形表格法 10.7 两阶段法 10.8 对偶原理 10.9 对偶单纯形法 10.10 应用举例 习 题 第十一章 组合优化算法计算的时间复杂度理论 11.1 dijkstra算法 11.2 floyd算法 11.3 kruskal算法 11.4 求最优树的破圈法和统观法 11.5 二分图中最大匹配与最佳匹配的算法 11.6 fleury算法 11.7 中国邮路问题及其算法 11.8 深度优先搜索法--dfs算法 11.9 项目网络与关键路径法 11.10 网络最大流算法 11.11 状态转移法 11.12 好算法、坏算法和np类问题 11.13 npc类问题 11.14 货郎问题的近似解 习 题... 参考文献
计算算法-设计与分析导论》是由Sara Baase和Allen Van Gelder合著的一本电子版教材。本书将算法设计与分析作为主要讨论的内容,旨在帮助读者理解和应用算法的基本原理和技巧。 本书的内容包括算法基础知识算法的设计策略、常见的算法设计问题和算法分析方法。作者通过丰富的实例和详细的解释,帮助读者理解如何正确地设计和分析算法。 本书的第一部分介绍了算法的基本概念,包括算法的定义、算法的特性、算法的效率和复杂度等方面。作者还介绍了一些常见的数据结构和算法的基本操作。 第二部分讨论了算法的设计策略,包括贪心算法、分治算法、动态规划等。通过具体的例子,读者可以了解这些策略的实际应用和解决问题的思路。 第三部分介绍了一些常见的算法设计问题,如排序、查找、图算法等。作者给出了多种解决这些问题的算法,并对它们进行了比较和分析,帮助读者选择合适的算法解决实际问题。 最后一部分介绍了算法分析方法,包括时间复杂度和空间复杂度的分析。通过掌握这些方法,读者可以评估算法的性能,并选择最合适的算法。 总之,《计算算法-设计与分析导论》是一本权威且全面的电子版教材,适用于计算机专业的学生和从事算法设计与分析的工程师。通过学习本书,读者可以掌握算法设计和分析的基本原理和方法,提高解决实际问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值