zoukankan      html  css  js  c++  java
  • 组合数学(1)

        为什么会这么说呢?因为这几天碰到一个算法,叫MCMC,这是一个相当复杂的东西,本以为我能够理解它,但是看了一天却发现自己不会的数学名词太多了,最终就败下阵来,投降了。因为最近被组合数学也搞的焦头烂额了,高中的时候关于排列组合就不是很敏感,感觉这更像是智力题,像我这种笨脑瓜只有靠努力的记忆题目类型了。

        组合数学的最主要内容是对离散对象的技术,首先是经常用到的两个基本准则,加法法则和乘法法则。这个还是挺好理解的。

        一一对应这点很重要,比如某种计数比较困难,可以考虑将问题转换为一个与其一一对应的问题,然后进行计数。

        排列组合的模型。关于排列组合的问题除了一一对应是个难点之外,还有解题中分类的方法比较重要,如下题目:

            从1到300间选取3个数使它们的和正好被3除尽,试问有多少种方案。&&  求由1,3,5,7不重复出现组成的整数的和

        圆周排列需要考虑一个重复度的问题,需要将重复度去除。

        接下来介绍了排列的生成算法,序数法,字典序法,换位法,轮转法。

        一个比较难理解的问题,我个人比较难理解的问题就是允许重复的组合问题。原问题是n个不同的元素中取r个作允许重复的组合,其组合数位C(n+r-1,r)。这个模型对比与盒子和球的问题时就是r个无标识的球放进n个有标志的盒子中。两个问题是等价的。证明的方法将其与无重复的组合问题一一对应。

        还有一个问题是不相邻的组合问题。组合的生成比较简单,类似字典序法。组合的意义可以解释为街道问题~,这和上次笔试那个极为的相似。

        这里有一个比较经典的街道问题,很多其他问题最终可以归结为这个问题。

       

        这个街道问题的原型是从(0,0)点走到(m,n)点,其中m<n。要求所走的路径上的点的横坐标恒小于纵坐标。

        其中有两个问题的解决都依靠于这个问题的解决。比如有一个排队买电影票的问题,排队的所有人中有50的,有100的,电影票值50元。售票处无零钱,每人限购一张电影票,有多少种排队方式可以使得售票处不用欠钱。永远都有找零。

        另外一个相似问题就是n个1和n个0组成的序列,任意前k个中0个个数不小于1的个数的序列有多少种。

        上面两种问题均转换为第一个半个街道问题,并且对角线上移即可。

        另外一种题目就是分类的方法比较怪异,还有就是要灵活运用重复组合的公式。也及r个相同的球放入n个不同盒子这个问题的模型,其等价于n个不同的求做取r个做重复组合。

        其中一个问题就是结合这两种,一个比较简单的版本就是5个0和4个1,组成的序列,其中01或10出现次数总和为4的序列有多少种?复杂的版本就是m个0,n个1,然后出现01或10次数总和为k次的序列有多少种?这个题目就需要讨论了。

        还有一些就是划分的技巧了,比如1-1000000中,0出现的次数。这里就分为个位出现的次数,十位出现的次数...讨论了。

        另外一个需要讨论的就是n个不同的数字,取出2组,其中一组的最小数比另外一组最大数大的取出方法有多少种,这里也需要分类讨论。

        

        组合数学感觉一个比较费脑力,需要思考的一门学科,跟计算机贴的也比较紧密。

        

  • 相关阅读:
    android的Fragment
    c#接口深入一步探究其作用,适合新人了解
    浅谈c#接口的问题,适合新手来了解
    再谈“我是怎么招聘程序员的”(下)转
    再谈“我是怎么招聘程序员的”(上)转
    关于如何写出优秀的代码(转)
    winserver服务器安全部署详细文档
    VS高效的调试技巧
    常用正则表达式(转自月光博客)
    JavaScript数组方法的兼容性写法 汇总:indexOf()、forEach()、map()、filter()、some()、every()
  • 原文地址:https://www.cnblogs.com/weixliu/p/2950371.html
Copyright © 2011-2022 走看看