用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只鸽子。
用Python复习离散数学(二)的更多相关文章
- 用Python复习离散数学(一)
最近要复习离散数学,不想挂啊,但是又想编程,大家知道啦,程序员离不开代码啊,所用想边复习边写代码,所以就自己用代码去实现一下离散的知识点,当做复习,自知自己的Python很渣,也想借此巩固一下基础,哈 ...
- 编程语言与Python学习(二)
1.1 流程控制之for循环 1 迭代式循环:for,语法如下 for i in range(10): 缩进的代码块 2 break与continue(同上) 3 循环嵌套 for i in rang ...
- python排序之二冒泡排序法
python排序之二冒泡排序法 如果你理解之前的插入排序法那冒泡排序法就很容易理解,冒泡排序是两个两个以向后位移的方式比较大小在互换的过程好了不多了先上代码吧如下: 首先还是一个无序列表lis,老规矩 ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- python/MySQL练习题(二)
python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...
- Python/MySQL(二、表操作以及连接)
Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...
- python下实现二叉堆以及堆排序
python下实现二叉堆以及堆排序 堆是一种特殊的树形结构, 堆中的数据存储满足一定的堆序.堆排序是一种选择排序, 其算法复杂度, 时间复杂度相对于其他的排序算法都有很大的优势. 堆分为大头堆和小头堆 ...
随机推荐
- Android 4.4(KitKat)表格管理子系统 - 骨架
原文地址:http://blog.csdn.net/jinzhuojun/article/details/37737439 窗体管理系统是Android中的主要子系统之中的一个.它涉及到App中组件的 ...
- Flex列在一个表格式的数字值
1.问题背景 一般的.表格中展示的比率.对照率的处理是:保留两位小数,并向上保留 2.实现实例 <? xml version="1.0" encoding="utf ...
- ZOJ 1649:Rescue(BFS)
Rescue Time Limit: 2 Seconds Memory Limit: 65536 KB Angel was caught by the MOLIGPY! He was put ...
- 持续集成Jenkins + robot framework + git
Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...
- mysql_windows_安装版添加到服务开机自启动
不解释 ,cmd下直接运行 sc create mysql binPath= "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe& ...
- c# 自定义数据类型
定义引用类型用 class ,值类型 用 struct ,涉及数据转换就用 上一篇的方法做 ,涉及 泛型就用 in 关键字 不用 in interface IContravariant<A& ...
- Xutils呼叫流源代码文件下载方法
//我主要是好奇Xutils哪里回调onLoading(),查找等了很久也没找到,果然easy查找只是把它写下来 前言: 1.代码摘要只有主线,提供一般流程 2.为了易于理解,码变量名,而是类名的驼峰 ...
- CRUD功能的JqGrid表格
CRUD功能的JqGrid表格 之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作 ...
- Magicodes.NET框架
Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding) 首先感谢大家对Magicodes.NET框架的支持.就如我上篇所说,框架成熟可能至少还需要一年,毕竟 ...
- css3中display和box小结
display:table用处: 1.创建登高列 2.实现大小不确定元素的垂直居中 3.容器内子项目数目未知,子项目平均分配容器的水平空间 float必须指定其宽度才行,不确定的话就用display: ...