用Python复习离散数学(一)

  最近要复习离散数学,不想挂啊,但是又想编程,大家知道啦,程序员离不开代码啊,所用想边复习边写代码,所以就自己用代码去实现一下离散的知识点,当做复习,自知自己的Python很渣,也想借此巩固一下基础,哈哈,事不宜迟,开始吧!

  1.集合

  概念:集合是由指定范围内的某些特定对象聚集在一起构成的,元素就是集合中的每一个对象

  怎么用python实现集合呢,这个我自定义了一个类,这个类中有一个构造方法,底层我用列表是存储集合中的元素,用add方法可以添加元素,show方法就可以展示元素

class MySet():

    __num = 0

    

    def __init__(self):

        self.s = []

        

    def show(self):

        self.str = '{'

        for x in self.s:

            if x == self.s[self.__num - 1]:

                self.str += x

            else:

                self.str += x + ', '

        self.str += '}'

        print self.str

        

    def add(self, element):

        self.__num += 1

        self.s.append(element)

测试一下:

s = MySet()

s.add('a')

s.add('b')

s.show()



#结果

#{a, b}

这样好样就有点味道了,爽爽的,杠杠的。

  1.1集合与集合的关系

  在这个这里我们要明白集合的几个特定性,集合的无序性,MySet类可以符合,但是还有个互异性我们就解决,互异性就是不能出现相同的元素,所以我们的add方法要改造一下:

    def add(self, element):

        __flag = 0

        for x in self.s:

            if x == element:

                __flag = 1

                print '%s element is exist!' % element

        if __flag == 0:

            self.__num += 1

            self.s.append(element)

 这样就解决了元素的互异性

  外延性原理:两个集合A和B相等,当且仅当它们有相同的元素,记为A=B,否则A与B不相等,记为A!=B

  程序怎么实现呢,我首先向MySet类添加下列方法,length方法拿到集合的长度,get方法根据索引那元素的值,checkExist方法检查元素是否存在在改集合中,setEqual方法就是判断集合相等的核心方法。

    def length(self):

        return self.__num

    

    def get(self, index):

        if index >= 0 and index < self.__num:

            return self.s[index]

        else:

            print 'no exist'

    

    def checkExist(self, element):

        for x in self.s:

            if x == element:

                return True

        return False

    

    def setEqual(self, setTemp):

        if self.__num == setTemp.length():

            for x in range(setTemp.length()):

                if self.checkExist(setTemp.get(x)):

                    continue

                else:

                    return False

            return True

        else:

            return False

 测试一下:

s1 = MySet()

s1.add('a')

s1.add('b')

s2 = MySet()

s2.add('a')

s2.add('b')

print s1.setEqual(s2)



#结果

#True

  判断是否为子集,这个也就是包含关系,其实我很经常弄错谁包含谁的,所以现在要搞清楚了:如果B的每个元素都是A的元素,则成B是A的子集,也成称B被A包含,或者A包含B,就是大的包含小的,OK,理解了,然后就看看程序怎么实现,我们通过isSubset方法去实现判断:

    def isSubset(self, setTemp):

        for x in range(setTemp.length()):

            if self.checkExist(setTemp.get(x)):

                continue

            else:

                return False

        return True

   在集合中有一个非常特殊的集合,不含任何元素的集合,称为空集,谨记,空集是任何集合的子集,我们通过isEmptySet方法来判断这个集合是不是空集。 

    def isEmptySet(self):

        if self.__num == 0:

            return True

        else:

            return False

   集合的运算:

  并运算:

union方法及测试:

    def union(self, setTemp):

        newSet = MySet()

        for x in self.s:

            newSet.add(x)

        for x in range(setTemp.length()):

            if newSet.checkExist(setTemp.get(x)):

                continue

            else:

                newSet.add(setTemp.get(x))

        return newSet

    

s1 = MySet()

s1.add('a')

s2 = MySet()

s2.add('b')

s2.add('a')

s2.add('c')

s3 = s1.union(s2)

s3.show() 

   交运算:

intersection方法的实现:

    def intersection(self, setTemp):

        newSet = MySet()

        for x in range(setTemp.length()):

            if self.checkExist(setTemp.get(x)):

                newSet.add(setTemp.get(x))

        return newSet

   差运算:(A-B表示一个差集,集合中只有属于A自己独有的元素)

subtraction方法的实现:

    def subtraction(self, setTemp):

        newSet = MySet()

        for x in self.s:

            if setTemp.checkExist(x):

                continue

            else:

                newSet.add(x)

        return newSet

  补运算:(首先要判断一下两者的关系是不是正确的,然后再去算补集)

complement方法的实现:

    def complement(self, setTemp):

        newSet = MySet()

        if setTemp.isSubset(self):

            for x in range(setTemp.length()):

                if self.checkExist(setTemp.get(x)):

                    continue

                else:

                    newSet.add(setTemp.get(x))

            return newSet

        else:

            print 'error in relation'

            return newSet

  对称差运算:(对称差集就是两个集合的并集减去两个集合的交集,其实简单的说就是并集和交集的差集)

sysmmetric方法的实现:

    def sysmmetric(self, setTemp):

        newSet1 = self.union(setTemp)

        newSet2 = self.intersection(setTemp)

        return newSet1.subtraction(newSet2)

你可能感兴趣的:(python)