集合运算

并查集

半世苍凉 提交于 2020-02-16 23:32:08
文章目录 并查集 并查集问题中集合如何存储 实现 并查集 集合的运算 :交、并、补、差和判断一个元素是否属于某一集合。 并查集 :集合的合并、判断一个元素是否属于某一集合的操作。 并查集问题中集合如何存储 可以用树结构表示集合,每棵树代表一个集合,树的每个节点一个集合的元素。例: 怎么更加方便的表示一棵树?答案是用数组。数组元素类型如下: Typedef struct SetNode { ElementType Data ; //存储数据 int Parent ; //存储父节点在数组中的下标;如果本身就是父节点,就用负数表示,负数绝对值的大小可以用来确定这棵树的高度 } SetType ; 例: 表示的集合为: 实现 查找一个元素在哪个集合 int Find ( SetType S [ ] , ElementType X ) { /* 在数组S中查找值为X的元素所属的集合 */ /* MaxSize是全局变量,为数组S的最大长度 */ int i ; for ( i = 0 ; i < MaxSize && S [ i ] . Data != X ; i ++ ) ; if ( i >= MaxSize ) return - 1 ; /* 未找到X,返回-1 */ for ( ; S [ i ] . Parent > 0 ; i = S [ i ] . Parent ) ;

波利亚计数

自闭症网瘾萝莉.ら 提交于 2020-02-14 01:15:00
Polya计数 将波利亚计数定理整理在这里,作为一个总结和介绍,也方便以后复习 为什么学习Polya计数定理 通过Polya计数定理,我们可以计算等价类的数量,比如下面这个问题: 用 \(m\) 种颜色给一个正方形染色,如果正方形可以自由转动,求染色方案数 让我们从一些概念开始 1 等价关系 1.1 等价关系的定义 假设 \(V\) 是一个集合, \(S\) 是定义在 \(V\) 上的一个关系,若 \(S\) 有如下性质: 自反性 传递性 对称性 那么, \(S\) 就是一个等价关系 \(a\) 和 \(b\) 有关系 \(S\) ,可以记为 \(aSb\) 假设定义关系 \(S\) ,图形 \(a\) 可以旋转得到 \(b\) \(\Leftrightarrow\) \(aSb\) 例如图中的 \(方块_1\) 和 \(方块_2\) 具有关系 \(S\) ,即他们可以通过旋转得到彼此,而 \(方块_1\) 和 \(方块_2\) 则没有关系 \(S\) 1.2 等价类 通过上图,可以看出来: \(方块_1\) 和 \(方块_2\) 是同一类的,而 \(方块_1\) 和 \(方块_2\) 则是另外两类,于是可以想到集合 \(V\) 上的等价关系 \(S\) 将集合的元素划分到不同的类中,我们把它称为等价类 而包含元素 \(a\) 的等价类则是由满足 \(aSb\) 的所有元素 \(b

几种随机算法的实现原理

瘦欲@ 提交于 2020-02-14 00:17:03
转自:http://www.androidstar.cn/%E5%87%A0%E7%A7%8D%E9%9A%8F%E6%9C%BA%E7%AE%97%E6%B3%95%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/   在日常工作中,经常需要使用随机算法。比如面对大量的数据, 需要从其中随机选取一些数据来做分析。 又如在得到某个分数后, 为了增加随机性, 需要在该分数的基础上, 添加一个 扰动 , 并使该扰动 服从特定的概率分布 ( 伪随机 )。本文主要从这两个方面出发, 介绍一些算法, 供大家参考。   首先假设我们有一个使用的随机函数float frand(), 返回值在(0, 1)上均匀分布。大多数的程序语言库提供这样的函数。 在其他的语言如C/C++中, 可以通过间接方法得到。如 frand()= ((float)rand() ) / RAND_MAX; 1, 随机选取数据   假设我们有一个集合A(a_1,…,a_n), 对于数m,0≤m≤n, 如何从集合A中 等概率地 选取m个元素呢?   通过计算古典概率公式可以得到, 每个元素被选取的概率为m/n。 如果集合A里面的元素本来就具有随机性, 每个元素在各个位置上出现的概率相等, 并且只在A上选取一次数据,那么直接返回A的前面m个元素就可以了,

大数据萌新的Python学习之路(三)

三世轮回 提交于 2020-02-13 21:34:02
笔记内容: 一、集合及其运算 在之列表中我们可以存储数据,并且对数据进行各种各样的操作。但是如果我们想要对数据进行去重时是十分麻烦的,需要使用循环,要建立新的列表,还要 进行对比,十分的麻烦,还消耗内存,所以我们在编程过程中就要使用集合。 Python中的集合和数学中的集合是一样的,也存在交并补的运算。集合的所有数据用花括号括起来,每个数据用逗号分隔。 我们可以来建立一个集合或者建立之后的列表通过set()来进行转换成集合。 1 set_1 = {1,5,15,25,48,78,44} 2 list_1 = [2,15,5,98,23,28] 3 set_2 = set(list_1) 4 print(set_1) 5 print(set_2) 输出结果: 我们建立了一个名为set_1的集合,名为list_1的列表,但是输出结果都是集合的形式,这是因为我们set_1是我们直接建立的集合,而set_2是我们通过set()用列表来转化而来的集合。集合中的数据也是和字典一样无序的,不能通过索引来存取数据。 set_1与set_2的两组数据之间是有重复的数据的5和15,那么如果我们想要把重复的数据取出来是,在数学中的做法是取交集,在Python中也是如此,像这样进行集合运算的操作叫做关系测试。 交集: 1 set_1 = {1,5,15,25,48,78,44} 2 set_2 = set

数学建模系列:模糊综合评判法

南笙酒味 提交于 2020-02-12 22:01:33
原理 模糊集 对于传统集合,一个元素要么属于这个集合,要么不属于这个集合,我们用1表示元素属于该集合,0表示元素不属于该集合。 模糊集合论认为一个集合可以不完全属于一个集合,用[0,1]之间的一个数来表示一个元素属于一个集合的程度,这个数叫做该集合的隶属度 模糊概念的清晰化 我们可以设定一个数(比如0.5)当一个元素的隶属度大于这个数时,我们就可以认为该元素时属于这个集合的 一级模糊综合评价 以人事考核为例,运用模糊综合评价,对企业员工的综合素质进行考核,从而为企业员工的升迁、评先晋级、聘用等提供依据。 具体步骤 : 确定因素集 对于员工的表现,需要从多个方面进行综合评判,如员工的业绩、工作态度、沟通能力、政治表现等。所有的这些因素构成了评价指标体系集合,即因素集,记为: \[ U=\{u_1,u_2,···,u_n \} \] 确定评语集 由于每个指标的评价值不同,往往会形成不同的等级。由各种不同决断构成的集合称为评语集,记为: \[ V=\{v_1,v_2,···v_n\} \] 确定各因素的权重 而通常不同的因素在综合评价中所起到的作用也是不同的,综合评价的结果很大程度上还依赖于各因素对综合评价所起的作用,就需要确定一个各因素之间的权重分配,它是U上的一个模糊向量,记为: \[ A=[a_1,a_2,···,a_n] \] 上式中, \(a_i\) 为第 \(i\)

元祖 字典 集合set

怎甘沉沦 提交于 2020-02-12 04:53:51
元组 定义:   ti=()   print(ti,type(ti)) 参数:for可以循环的对象(可迭代对象) t2=tuple("123") # ('1', '2', '3') <class 'tuple'> ←print(t2,type(t2)) t3=tuple([1,2,3]) # (1, 2, 3) <class 'tuple'> t4=tuple((7,8,9)) # (7, 8, 9) <class 'tuple'> 定义一个只有一个值的元祖: print(('owen',)) # ('owen',) print(tuple(['owen'])) # ('owen',) 常用操作:元组有序存储# 索引 | 切片 | 长度# .count(obj) | .index(obj, bIndex, eIndex) 索引取值 t = (1, 2, 3, 2, 3, 2) print(t[1]) # 2 print(t[-2]) # 3 切片 print(id(t)) #2121545418120 nt = t[:-1:] print(nt, id(nt))#(1, 2, 3, 2, 3) 2121544282448 长度(item元素个数) print(len(t)) #6 元组内置方法 print(t.count(2)) # 该数据集合可以存放相同数据 print(t

Part7--集合

廉价感情. 提交于 2020-02-11 16:17:07
集合是一种可变数据类型 集合一种无序不重复的集,所有集合的作用主要就是去重 关系测试,测试两组数据之前的交集、差集、并集等关系 集合的定义 使用set()定义集合 创建无重复的集合 直接使用{}来定义 集合里面的元素必须是不可变数据类型 集合对象的方法 2个增加 3个删除 集合的简单运算 in包含运算, 判断元素是否是集合中的元素 求交集set1 & set2 <==> set1.intersection(set2) 并集set1 | set2 <==> set1.union(set2) 来源: CSDN 作者: wlbonnie 链接: https://blog.csdn.net/wlbonnie/article/details/104263161

关于python的集合的个人总结

雨燕双飞 提交于 2020-02-11 14:38:05
关于python的集合的个人总结 一、变量: 1、变量的类型:字符串、数字、列表、字典、元组 2、变量的分类:   1、可变不可变:     (1)、可变:列表、字典     (2)、不可变:字符串、数字、元组   2、访问顺序:     (1)顺序访问:字符串、列表,元组     (2)映射:字典     (3)、直接访问:数字     (4)、存放元素个数       a、容器类型:列表、元组、字典        b、原子:数字、字符串 二、集合的定义和基本操作方法 1、定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key 2、特性:不同元素、无序、不可变元素 3、集合的定义:     (1)、s={1,2,3}     (2)、定义可变集合set:s = set("hello")     (3)、定义不可变集合frozenset:s=frozenset()   4、操作方法:     (1)、s.pop() 随机删除元素     (2)、s.remove() 删除指定元素,删除元素不存在,会报错     (3)、s.discard() 删除指定元素,删除元素不存在,不会报错     (2)、s.add() 添加元素     (3)、s.clear 清空集合     (4)、s1.update(s2) 更新多个元素   5、集合的关系运算    

python基础面试集锦(1-50)

亡梦爱人 提交于 2020-02-10 18:16:28
目录 1、Python和Java、PHP、C、C#、C++等其他语言的对比 2、简述解释型语言和编译性语言? 3、Python解释器种类以及特点? 4 、位和字节的关系? 5、b、B、KB、MB、GB的关系? 6、一个字符不同编码对应的字节数? 7、PEP8编码规范? 8、or and 计算规则 9、求结果:or and 10、ASCII、unicode、utf-8、gbk区别? 11、字节码和机器编码的区别? 12、三元运算编写格式? 13、Python2和Python3的区别? 14、一行代码数值交换?交叉赋值 15、python2和python3中Int和long的区别? 16、xrange和range的区别? 17、字符串的反转序列?步长-1切 18、文件操作时:xreadlines和readlines的区别? 19、列举布尔值位false的常见值? 20、is和==的区别? 21、那些情况下,y!=x-(x-y)会成立? 22、现有字典dict = {'a':20,'b':25,'c':10,'d':50}请按字典中的value值进行排序? 23、如何将字典的键值互换? 24、字典和json的区别? 25、什么是可变、不可变类型? 26、存入字典里的数据有没有先后排序? 27、字典推导式? 28、描述一下dict的item()方法与iteritems()的不同? 29

java加载redis以及基本操作

为君一笑 提交于 2020-02-10 13:24:44
前言:    Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。    为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。同时,Redis支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。 Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的事物支持、发布订阅 ( pub/sub)、管道(pipeline)和虚拟内存(vm)等 。 Redis具有丰富的客户端,支持现阶段流行的大多数编程语言。