zoukankan      html  css  js  c++  java
  • 隔板法总结

      关于组合数的一类知识 其实就那么多关键是 计数问题如何解决,这里是计数问题常用模型 隔板法。

    隔板法 具体的 指将 n个数字分成m组的方案数 这看起来很难计数 有一个想法是 每个数字都有m个选择 答案为m^n 可是有重复除以n!也没有什么具体的含义所以不能这么搞。

    观察到这些球并不是互异的。众所周知 组合数是不讲究互异的 所以考虑转换到组合数的模型。我们知道m组中数字个数加起来为n。

    引例:

    抽象出来模型n个球放一排往里面放m-1个板就可以完成这个问题了 且 不讲究互异。但是考虑我们只能在空隙中放板所以 是C(n-1,m-1).

    但是考虑我们每一组分到的球数都是>=1的 所以当题目说可以为0的时候我们还需做一个操作我们把每组中放一个球的情况看成放了0个球这样依次的递减 我们只需要再多出n个球就好了,这样保证了每一组中都至少有了一个球,当然如果是一个球的话那么其实是0个球。

    这里 就引出了我们隔板法的定义:在n个元素中n-1个空插入k个板 将其分成k+1组的方法。

    应用隔板法d的三个必要条件:1 n个元素必须不互异 2 所分成的每一组都必须要有1个元素 3 分成的组别彼此相异。

    接下来介绍几种变形吧...

    添元素隔板法。上述引例其实就是一个这种方法的应用。

    1   那么 更换问题 10个相同的小球放入3个不同的箱子 第一个箱子至少一个 第二个箱子至少三个个 第三个箱子可以不放 有多少种情况...还简单么...

    当然 因为小球的相同的 我们可以直接钦定先把1个球放第一个箱子 三个球放第二个箱子里 那么 7个球放到三个箱子里且每个箱子可以不放球 这样我们成功转换到上述模型了...

    但是 这样做还是绕了一圈 因为我们最终还是转换成了正整数解,不如直接向正整数解进行转换 考虑我们从第二个箱子钦定放两个 最后一个箱子我们手动的加球表示让第三个箱子至少有1个球 的时候表示为0个球2个球的时候表示1个球...即可。

    为什么正确...证明1 发现两种做法的到的式子相同故正确,证明2 我们始终定义第三个箱子有球的话就是球数-1 这样也能证明是正确的。

    2   将20个相同的小球放入编号分别为1,2,3,4的四个盒子中,要求每个盒子中的球数不少于它的编号数,求放法总数。

    显然我们直接钦定放就行了 反正球是相同的。关于正确性的证明可以从答案的存在性证明。

    3  一类自然数从第三个数字开始每个数字都等于其前面两个数字之和 直至不能写为止 求这种数字有多少个?
    显然我们从没10到100开始爆搜 直接搜方案数即可,但是能利用我们上述的隔板法解决此问题么?我刚才手动算了一下发现是45个 这也意味着不需要for 但是我想让我们利用隔板法解决这个问题...

    显然一个数字从前两位固定 那么整个数字就固定了我们只需要统计合法的前两位即可。设第一位为a 第二位为b 那么则有 a+b<=9 且a>0 这个时候我们把<=换成==就是上面的模型了...可惜并不能。

    我们发现b可以为0 那么先补球让b>0 也就是a+b<=10 a b都为正整数 考虑<如何处理也就是这10个球不一定全部放入a和b我们每次把没放入a b 的球都放到c就好了 那么有 a+b+c==10 但是还有可能放完 c为空所以我们再次钦定c>0 那么结果就是

    11个球放入三个箱子之中 C(10,2) ==45;非常的巧妙利用不断转换的原理。

    添板插板法。还是上述例题,具体的我们让 就是添加了 c这个板 然后再进行插板 上述过程就是这个了 不过和添元素集合在了一起。

    选板法。有10粒糖,如果每天至少吃一粒(多不限),吃完为止,求有多少种不同吃法?看起来很难解决的问题我们利用选板法。

    首先必要的 我们有9个板如果都放的话说明10天每天一粒,但是每个板可以选择放或者不放 所以是2^9=512 两个板之间的糖定义为前一个板的那一天吃的。这样完美的转换了问题且不重不漏。

    当然 还有一种证明我们先把9个板放上去 发现每天一粒 如果哪一天我多吃了 说明最后一天是没有的...那最后一天不吃就是9种 倒数第二天是8种 ...这样做显然出错 因为有重复的了...

    但其实我们画一张图观察一下 上面的方法显然正确。

    分类插板法。小梅有15块糖,如果每天至少吃3块,吃完为止,那么共有多少种不同的吃法?

    这个和上面的选板法非常的相似可是我们不能保证每天都吃三块 直接钦定 也不行我们不知道天数不能钦定...

    我们可以分类讨论一下 最多吃5天 最少吃1天 那么 这两种方案都是1,当吃2天的时候 钦定...C(10,1)=10 吃三天的时候 钦定...C(8,2)=28.吃4天 钦定..C(6,3)=20

    综上有60种。

    逐步插板法。在一张节目单中原有6个节目,若保持这些节目相对次序不变,再添加3个节目,共有几种情况?

    我们可以逐步插入 插入第一个板的时候空隙7个 C(7,1)第二个继续C(8,1)第三个C(9,1) 相乘得 504;因为 我们添加的三个元素互异 所以不能一起插入需要逐步的插入。

    到这里 基本上隔板法 的所有模型就结束了 熟记方法 数数的时候好数/cy

  • 相关阅读:
    Golang Failpoint 的设计与实现
    没涉及到最值求解;观点:矩阵乘法无法表达出结果。 现实生活中事件、现象的数学表达
    多元微分学 枚举破解15位路由器密码 存储空间限制 拆分减长,求最值 数据去重
    ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?
    The C10K problem
    HTTP Streaming Architecture HLS 直播点播 HTTP流架构
    现代IM系统中消息推送和存储架构的实现
    现代IM系统中的消息系统架构
    长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改
    doubleclick cookie、动态脚本、用户画像、用户行为分析和海量数据存取 推荐词 京东 电商 信息上传 黑洞 https://blackhole.m.jd.com/getinfo
  • 原文地址:https://www.cnblogs.com/chdy/p/11490963.html
Copyright © 2011-2022 走看看