数学集合

Set接口

倾然丶 夕夏残阳落幕 提交于 2020-03-06 10:26:30
所在包: java.util.Set<E> 参数类型: E - 由此集合维护的元素的类型 All Superinterfaces: Collection <E>, Iterable <E> All Known Subinterfaces: NavigableSet <E>, SortedSet <E> 所有已知实现类: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet public interface Set<E> extends Collection <E> 不包含重复元素 的集合。 更正式地说法,集合不包含一对元素 e1 和 e2 ,使得 e1.equals(e2) ,并且 最多一个空元素 。 正如其名称所暗示的那样,这个接口模拟了数学 集 抽象。 Set 接口 除了 继承自 Collection 接口 的所有构造函数的 合同 以及 add,equals 和 hashCode 方法的 合同外 , 还 增加 了其他规定。 其他继承方法的声明也包括在这里以方便。 (伴随这些声明的规范已经量身定做 Set 接口

数据库的关系运算和完整性约束

随声附和 提交于 2020-03-03 00:41:16
对关系数据库进行查询统计时,需要查询到用户感兴趣的数据,这就需要对关系及关系间进行一定的运算。本篇主要讲述关系运算和关系的完整性约束,理解关系操作的含义,了解传统的集合运算,掌握关系代数中基本关系运算。通过本篇的学习,读者应该能掌握以下内容: ● 集合的合并、交集、求差、乘积操作 ● 关系运算的选择、投影、连接操作 ● 关系的完整性约束 ● 关系的范式 关系运算 关系模型是目前用的最多的数据模型,具有严格的数学理论基础,其主要数学理论基础就是集合运算。关系模型提供了一系列操作的定义,这些操作称为关系代数操作。它可分为两类,一类是集合操作;另一类是关系专用的操作。 1、集合操作 集合操作是把关系看作元组的集合来进行传统的集合运算,其运算结果仍是关系,前提是参与运算的两个元组具有相同的结构,即含有相同的属性,且对应属性的值域相同。下面对传统的集合运算合并、交集、求差、乘积运算进行逐一说明。 集合运算——合并 假设有A、B两个集合 A = {1,3,5,9}, B = {2,3,5,7} 由所有属于集合A或属于集合B的元素组成的集合,叫做集合A与集合B的合并,也称为集合A与集合B的并集,记作: A U B = {1,2,3,5,7,9} 由此可以推出,设R和S是两个关系,则R U S是合并R和S,合并后的结果仍是关系,结果表中的元组或属于R,或属于S,如图2-10所示: 图 2-10

图与网络模型及方法之最短路问题(dijkstra算法)

风格不统一 提交于 2020-03-01 19:04:07
两个指定顶点之间的最短路径: 两个指定顶点之间最短路问题的数学规划模型: 每对顶点之间的最短路径: 最小生成树问题: Prim算法: Prim算法类似病毒感染的过程,其中P中存放的是已经计算出的顶点(即前一顶点与后一顶点构成的边在最短路径上),然后遍历P中所有的顶点,找出与V-P中所构成的边的最小值得那个顶点a,然后将顶点a归入P中,如此迭代,最终P=V,即算出了最小生成数。 Kruskal算法: 其实Kruskal算法的思想和Prim算法的思想都是一样的(都是将所有点分为两个集合,已经遍历过的点归入P集合,未遍历过的点在V-P集合中,其中V是所有点的集合),Prim算法是将每次算出的最小权值的新顶点归入P集合,然后找出P集合与V-P集合中的点所成的最小权值的边,将构成最小权值边的V-P中的那点再归入到P集合中,如此迭代下去,P集合最终会和V集合相等。Kruskal算法是将P集合中的点化为一个点(标号值最小的那个点,对于每次迭代来讲,即将找到的最短权值边的较大的顶点标号改为较小的那个顶点的标号,并且淘汰掉此次迭代找到的最短权值边),每次迭代都会找到一个新点,如此迭代n-1(n是V集合中点的个数)次,就算出了最小生成树。 来源: https://www.cnblogs.com/anyk1416/p/12391130.html

「知乎」如何证明不可计算的函数比可计算的函数多? - 高旭旭的博客

谁都会走 提交于 2020-02-27 12:54:50
这篇文章转载自 我在知乎上的回答 严谨的证明的话,可以使用「形式语言」( Formal language )来证明: 在可计算理论和计算复杂度理论中,每个「计算问题」都被描述为一个一个「形式语言」,即字符串的集合。比如对于判断一个图是否是无向连通图这个问题:我们可以写为一个描述所有无向连通图的集合: 由于图灵机只能接受字符串,所以这里的尖括号表示对图的「编码」。出于简单,我们全部使用现实计算机所使用的字母表 $Sigma = {0, 1}$,所以「编码」即一个对象的二进制字符串描述。 如果我们能构造出一个图灵机来「决定」这个「形式语言」,即可以判断一个「输入」是否属于这个集合(membership 与 non-membership),那么我们可以说我们用「图灵机」描述了一个「算法」来计算这个问题,而这个「计算问题」所对应的函数是「可计算的」,否则是「不可计算的」。(注 1) 那么,如果我们有一个包含了所有「可计算函数」的集合,这个集合会有多大呢? 由于 所有「可计算函数」总有一个对应的「图灵机」来计算它 每一个「图灵机」都可以被「编码」为一个不同的 0、1 序列,比如 000,010… 0、1 序列、即二进制,总是可以被转换为一个十进制数的 所以,我们这个集合实际上是与整数集 $Z$ 一样大(等势)的,我们把这个集合表示为 $Sigma^{*}$。 易知 $Z$ 是「无穷可数

python易错易忽略知识点

岁酱吖の 提交于 2020-02-26 02:52:04
文章目录 python基础知识 谈注释 谈数据类型 谈分支结构 谈random库的使用 谈组合数据类型 谈字符串类型 python基础知识 谈注释 1.在Python中将包含在一对三引号(’’’……’’’)或者("""……""")之间,并且不属于任何语句的内容认为是多注释。 谈数据类型 1.复数(complex) 2.repr() 返回一个对象的 string 格式。 3.布尔类型 bool()函数来测试数据对象、表达式是True还是False。 4.数据类型转换 int→整数型、float→浮点型、str→字符串型、hex→转化为十六进制字符串、oct→转化为八进制字符串 谈分支结构 1.**多分支结构:**if…elif…else 谈random库的使用 谈组合数据类型 1.列表 列表序列操作有:索引、切片、修改、追加、插入、删除、扩展、统计、排序(翻转)、获取下标、拷贝 a.索引 注意:通过索引取出的元素类型为 str b.切片 注意点 切片的索引界限可以利用谚语 “顾头不顾尾” 来记忆,也可以理解为数学中的左闭右开,数学式为: [a, b) 如果省略分隔符前面的索引值,如 list[:b] ,则表示为从第一个元素开始索引,数学式为: [0,b) ; 如果省略分隔符后面的索引值,如 list[a:] ,则表示为从a开始索引,索引到最后一个元素结束,此时表现为 “顾头又顾尾”

Python基础语法三组合数据类型

断了今生、忘了曾经 提交于 2020-02-10 00:31:42
一、列表(Lists) 列表属于Python中的序列类型,它是任意对象的有序集合,通过 “ 位置 ”或者 “ 索引 ” 访问其中的元素,它具有可变对象、可变长度、异构和任意嵌套的特点。 列表里第一个元素的为值或者索引是从 “ 0 ” 开始,第二个元素则是 “ 1 ”,一次类推。 列表的元素放置在方括号 [] 中,以逗号来分隔各元素; 格式如下: listname = [元素1,元素2,元素3,...,元素n ] 1 1 listname = [元素1,元素2,元素3,...,元素n ] 例: sample_list1 = [1,2,3,4] sample_list2 = ["P","y","t","h","o","n"] sample_list3 = ['Python','sample','list','for','your','reference'] print(sample_list1) print(sample_list2) print(sample_list3) 6 1 sample_list1 = [1,2,3,4] 2 sample_list2 = ["P","y","t","h","o","n"] 3 sample_list3 = ['Python','sample','list','for','your','reference'] 4 print(sample

python基础 2 基本类型及操作

安稳与你 提交于 2020-02-06 00:27:19
文章目录 数字类型及操作 整数类型 进制转换 浮点类型 复数类型 数值运算操作符 数字类型的关系 数值运算函数 集合类型及操作 集合类型的定义 集合创建 集合操作符 集合处理方法 字符串类型 索引操作 切片操作 字符串类型表示 字符串的序号 特殊字符的表示 字符串操作符 字符串操作函数 字符串操作方法 字符串类型的格式化 序列类型 序列类型的定义 序列类型及操作 序列类型通用函数和方法 元组类型及操作 列表类型及操作 字典类型 列表类型操作函数和方法 数字类型及操作 整数类型 pow(a,b)函数 进制转换 浮点类型 运算存在不确定尾数。 0.1+0.2=0.3000000000004 原因:采用53位二进制表述浮点数。 round(x,d)函数:对x四舍五入,d是小数截取位数。 浮点数比较大小可能需要round函数辅助比较。 复数类型 数后面贴一个j代表复数。 z.real获取实部 z.image获取虚部 cmath库专门处理复数 数值运算操作符 + - * /(是浮点数结果) //整数除(10//3=2) % **(x**y:x的y次幂) += -= *= /= //= %= **= 数字类型的关系 混合运算,生成结果为”最宽“类型 整数 -> 浮点数 -> 复数 混合运算注意不确定尾数 数值运算函数 abs(x) 绝对值 divmod(x,y) 商余*(x//y,x%y)

Python学习-集合使用

前提是你 提交于 2020-02-03 03:38:48
集合定义: -集合类型与数学的集合概念一致 -集合元素无序且唯一, -集合元素不可修改,是不可变数据类型 不可变数据类型:整数、浮点数、复数、字符串、元组 可变数据类型:列表 -用{}表示,元素间用逗号分隔 -生产用{}或者set函数 -生成空集合时用set函数 A={“python”,123,(“python”,123)}#三个元素 B=set()#空集合 C={“python”,“123”,“python”}两个元素 B=set(“pypy123”) B {‘2’, ‘p’, ‘y’, ‘3’, ‘1’} B={“pypy123”} B {‘pypy123’} 操作符: S|T:并 S-T:差 S&T:交,同时在S和T中的元素 S^T:补,S和T中非相同原始 S<=T,S<T:子集判断 S>=T,S>T:包含关系判断 集合处理方法: S.add(x) S.discard(x):移除S中的元素x,不报错 S.remove(x):移除S中的元素x,如果x不在S中,报错 S.clear():清除所有元素 S.pop():从集合中随机返回一个元素,如果集合为空,keyerror S.copy() :返回集合S的一个副本 len(S):返回集合S的元素个数 x in S 、x not in S :判断S中是否有元素x set(S):将其他类型转换为集合类型 应用场景: 数据去重: ls=

python数据类型(最终弹)

限于喜欢 提交于 2020-02-02 23:56:50
世界上最容易的事是坚持,最难的事也是坚持。开通博客园已两月有余,但实际上笔者本人的活跃度非常低,痛定思痛,自己选的路含泪也要走下去,继续坚持! 本文承接前几个月的python数据类型系列,完成对字典与集合两种数据类型的介绍,并结束python数据类型系列。 字典是python语言中常用的数据类型之一,顾名思义,一个字典就是许多“键值对”的集合,一个键值对就是字典的一个数据元素,示例如下: 从上图可以看到,该字典含有三个键值对,每个键值对的“键”都是字符串,“值”有数值型、布尔型和字符串。当然,python字典的键值对的“键”与“值”可以是任何python基本数据类型,即“键”可以是数值型,“值”可以是列表,“键”可以是元组,“值”可以是另一个字典,如此等等;需要注意的是,同一个字典中,每一个键值对的“键”在该字典中是唯一的,“值”没有限制,同一字典中两个不同的键值对的“值”完全可以相同。 再来看一下“集合”这个数据类型,但凡接触过数学中的集合概念,那么理解python的集合也就非常容易了。与数学中的集合一样,python的集合就是一些互异数据的组合,示例如下: 需要注意:定义空集合不能直接用大括号的方式,那样python解释器会把它理解为一个空子典,而是使用图中特定的方法定义空集合。 集合定义好后,可以对其进行交、差、并等常见运算(多个集合之间),和数学中的集合一样

并查集

三世轮回 提交于 2020-01-30 21:25:06
1.不相交集合操作: 集合嘛!就是集合论中的集合.它包括无序,确定,互异性. a.不相交集合定义:任意两个集合的交集为空.这样对于任意一个数据(元素),它只能属于这个不相交集合族中的某一个集合里面! b.其数据结构: 不相交集合数据结构保持一组不相交的动态集合S={S1, S2,…, Sk}。每个集合通过一个代表来识别,代表即集合中的某个成员。选择代表成员视乎具体应用,如选择最小元素。其中Si表示一个集合,Si这个集合可以通过其中的一个元素root予以代表. 2.对数据结构的操作:集合中的每一个元素是由一个对象表示的。设x表示一个对象,支持以下操作: 1)Make-set(x):建立一个新的集合,其唯一成员就是x。各集合是不相交的,所以x没有在其他集合中出现过; 2)Union(x,y):将包含x和y的动态集合(Sx和Sy)合并成一个新的集合(并集SxUSy),当然Sx和Sy是不相交的. 3)Find-set(x):返回一个指针,指向包含x的唯一集合的代表. 3.时间复杂度分析: 见算法导论! 分析要结合具体组织方式. 4.数据结构的组织方式: 一共有两种! 1.链表.即一条链表示一个集合 2.有根树.具体就是由一群树构成的森林 5.数据结构的优化: 可以采用以下两种方式进行优化: 1.路径压缩--两层深度的树,降低深度,方便find. 2.按秩合并--即考虑树结点数目