• 用Python复习离散数学(二)


      这次复习的是计数问题,立刻走起吧!

      1.乘法原理

        如果一项工作需要t步完成的,第一步有n1种不同的选择,第二步有n2种不同的选择,……,第t步有nt中不同的选择,那么完成这项工作所有可能的选择种数为:

          n1 x n2 x …… x nt

    def multiply(*args):
        count = 0
        for x in args:
            count *= x
        print "the all possible choices is %d" % count

      2.加法原理

        假定X1,X2,……,Xt均为集合,第i个集合Xi有ni个元素,则可以从X1,X2,……,Xt中选出的元素总数为:

          n1 + n2 + …… + nt

    def add(*args):
        count = 0
        for x in args:
            count += x
        print "the total number is %d" % count

      3.排列问题

        从含n个不同元素的集合S总有序选取的r个元素叫做S的一个r排列,不同的排列总数记为P(n, r),如果r = n,则称这个排列为S的一个全排列,简称为S的排列。

    下面是在对集合中进行排列,添加了几个方法:

        def remove(self, element):
            self.s.remove(element)
            self.__num -= 1
            
        def copy(self):
            setTemp = MySet()
            for x in self.s:
                setTemp.add(x)
            return setTemp
            
        def rank(self, n):
            if n <= self.__num and n > 0:
                setTemp = MySet()
                self.rankHelp(setTemp, n, '', self)
                return setTemp
            else:
                print 'Error in parameter'
            
        def rankHelp(self, setTemp, n, element, s1):
            if n == 1:
                for x in s1.s:
                    e = element
                    e += x
                    setTemp.add(e)
            else:
                for x in s1.s:
                    temp = s1.copy()
                    e =  element
                    e += x
                    temp.remove(x)
                    self.rankHelp(setTemp, n-1, e, temp)

      4.组合问题

        从含有n个不同元素的集合S中无序选取的r个元素叫做S的一个r组合,不同的组合数记为C(n, r)。

        def build(self, temp):
            setTemp = MySet()
            for x in temp:
                setTemp.add(x)
            return setTemp
        
        def group(self, n):
            if n <= self.__num and n > 0:
                setTemp = MySet()
                self.groupHelp(setTemp, n, '', self)
                return setTemp
            else:
                print 'Error in parameter'
        
        def groupHelp(self, setTemp, n, element, s1):
            if n == 1:
                for x in s1.s:
                    e = element
                    e += x
                    setTemp.add(e)
            elif n == s1.__num:
                for x in s1.s:
                    element += x
                setTemp.add(element)
            else:
                for x in range(s1.length()-n+1):
                    e = element
                    e += s1.get(x)
                    temp = self.build(s1.s[x+1:])
                    self.groupHelp(setTemp, n-1, e, temp)

      5.容斥原理

        所谓的容斥,是指我们计算某类物体的数目的时候,要排斥那些不应包含在这个计数中的数目,但同时要包容那些被错误地排斥了的数目,以此补偿,这个原理称为容斥原理。

      6.鸽笼原理

        若有n+1只鸽子住进n个鸽笼,则有一个鸽笼至少住进2只鸽子。

  • 相关阅读:
    ubuntu下/etc/rc.local和/etc/init.d/rc.local的区别
    Shell 中的中括号用法总结
    基于C语言sprintf函数的深入理解
    linux下查看十六进制文件方法
    oracle load data infile
    linux bash中too many arguments问题的解决方法
    关于促进问题解决
    SYSTEM表空间过大问题
    01 Oracle分区索引
    oracle 11gR2 ASM添加和删除磁盘 转
  • 原文地址:https://www.cnblogs.com/rayguo/p/3481235.html
Copyright © 2020-2023  润新知