用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复习离散数学(一)的更多相关文章
- 用Python复习离散数学(二)
这次复习的是计数问题,立刻走起吧! 1.乘法原理 如果一项工作需要t步完成的,第一步有n1种不同的选择,第二步有n2种不同的选择,……,第t步有nt中不同的选择,那么完成这项工作所有可能的选择种数为: ...
- 九九乘法表的python复习
九九开始的复习 这周复习之前的学的知识关于range函数,gormat函数,print的使用总结一下 从一个小例子开始,开始我的回顾吧, 大家都是从那个九九乘法表开始的数学之旅,从一一得一,开始了我们 ...
- Python 复习-1
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/10/27 22:46 # @Author : lijunjiang # @Fi ...
- Python复习 一
Python回炉复习 1 变量 Python的变量和C语言的变量书写方式类似: 书写要求 python程序编写结构利用缩进表示,抛弃花括号: 结构 分支: if(条件语句1): 执行语句块 else ...
- 后端程序员之路 20、python复习
Welcome to Python.orghttps://www.python.org/ 怎么用最短时间高效而踏实地学习 Python? - 知乎https://www.zhihu.com/quest ...
- python复习
1.input和raw_input的区别 input假设输入的都是合法的python表达式,如输入字符串时候,要加上引号,而raw_input都会将所有的输入作为原始数据 2.原始字符串前面加上r,e ...
- Python复习笔记-字典和文件操作
抽时间回顾2年前自己做过的python工具,突然感觉不像自己写的,看来好久没用过python的字典和文件操作了,查询资料和网页,整理如下: 一.字典 键值对的集合(map) 字典是以大括号“{}”包围 ...
- python复习。知识点小记
1.对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符: >>> ord('A') >>> ord('中' ...
- python复习1
比如常用的数学常数π就是一个常量.在Python中,通常用全部大写的变量名表示常量: Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对 ...
随机推荐
- 【LaTeX排版】LaTeX纸排版<两>
1.文件夹的生成 直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...
- POJ 2502 Subway (Dijkstra 最短+建设规划)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6689 Accepted: 2176 Descriptio ...
- hdu Color the ball
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 树状数组的 update的应用,逆序更新 代码: #include <stdio.h&g ...
- 基于Js实现的UrlEncode和UrlDecode函数代码
<script language="javascript">//UrlEncode函数function UrlEncode(str){ var ret="& ...
- VisualStudio 自动排版等 快捷键
VisualStudio2010自动排版快捷键:全部代码排版:1. ctrl+E,D 按住ctrl,相继按下E.D 2. ctrl+K,F 按住ctr ...
- [Android] Upload package to device fails #2720
错误描述: 解决办法: 来源:https://facebook.github.io/react-native/docs/android-setup.html
- js中arguments
arguments 每天一对象,JS天天见,今天我们来看看arguments对象及属性.arguments对象不能显式创建,arguments对象只有函数开始时才可用.函数的 arguments 对象 ...
- oracle_面试题01
完成下列操作,写出相应的SQL语句 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为500MB. ...
- 网站静态化处理—web前端优化—下【终篇】(13)
网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...
- Hibernat之关系的处理多对多
第一步:编写两个pojo,比如一个学生表一个课程表 这里使用注解. 需要 课程表: package com.qcf.pox; import java.util.HashSet; import jav ...