社区
数据结构与算法
帖子详情
讨论:集合相关算法
liaomingxue
2010-07-10 05:47:56
兄弟最近的一个算法是一个有限离散整数集合相关的问题,希望大家能给出一些建议。
1 集合:有限非负整数集合,集合的基(集合中元素的个数)最大为32768,集合可以无序也可以有序,元素是离散的不保证连续。
2 要求集合包含关系,集合与元素的属于关系,多个集合交集三个方面操作的高效算法
...全文
188
7
打赏
收藏
讨论:集合相关算法
兄弟最近的一个算法是一个有限离散整数集合相关的问题,希望大家能给出一些建议。 1 集合:有限非负整数集合,集合的基(集合中元素的个数)最大为32768,集合可以无序也可以有序,元素是离散的不保证连续。 2 要求集合包含关系,集合与元素的属于关系,多个集合交集三个方面操作的高效算法
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jovial__
2010-07-11
打赏
举报
回复
用位图表示,进行按位与等相关操作,应该是最快的了,慢的话感觉有可能是实现的问题。
超级大笨狼
2010-07-11
打赏
举报
回复
[Quote=引用 1 楼 zentropy 的回复:]
包含关系:O(n1+n2) 分别判断一个集合中的元素是否在另外一个当中
多个集合交:O(n1+n2+...+nk)
[/Quote]
其实用不着,只要循环最小的集合就可以得到包含和交集
所以
集合包含关系O(min(n))
多个集合交集O(min(n))
超级大笨狼
2010-07-11
打赏
举报
回复
可以用并查集和哈希表两种做法。
本人还是喜欢哈希表,最好你使用的语言有现成的。
如果用Hash表的话。
集合包含关系O(min(n))
集合与元素的属于关系O(1)
多个集合交集O(min(n))
liaomingxue
2010-07-10
打赏
举报
回复
楼上的也不错,我们目前用的是64bit的long进行数据组织的,但感觉还是慢,应该还可以更快
jovial__
2010-07-10
打赏
举报
回复
用位图表示集合。32768用4096个8位int型就可以表示了。
包含关系:对二者进行相与, 出现原数字,那么肯定是包含关系。谁包含谁,只需比较二者的大小就行了。
属于关系:只要判断对应位是否为1就行了。
多个集合交:一样对多个集合进行按位与。然后找出对应为1的序号。
liaomingxue
2010-07-10
打赏
举报
回复
楼上的还不错,基本上是目前的实现水平。
不过,包含关系应该是O(n1)的,因为只需要对一个集合进行循环判定其元素是否在另一个集合之中(注意,求包含关系一般是单向的,即求A是否包含B,一般不需要同时要求反过来确定B是否包含A)
zentropy
2010-07-10
打赏
举报
回复
先来一块大砖头吧:)
用一个hash表表示一个集合
包含关系:O(n1+n2) 分别判断一个集合中的元素是否在另外一个当中
属于关系:O(1)
多个集合交:O(n1+n2+...+nk)
数据结构与
算法
分析之概论
数据结构与
算法
数据结构与
算法
学习笔记——基本概念
零基础自学数据结构与
算法
,记录编程学习日常,基于《大话数据结构》进行学习与重点知识整理
JavaSE
集合
相关
题
JavaSE
集合
相关
题 1、List、Set、Map 是否继承自Collection接口? 答:List,Set是,Map不是。 Collection是最基本的
集合
接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。 Map没有继承Collection接口
垃圾回
相关
收
算法
详解
任意顺序整理实现简单,且执行速度快,但任意顺序可能会将原本相邻的对象打乱到不同的高速缓存行或者是虚拟内存页中(理解为打乱到内存各个地方),会降低赋值器的局部性。包括他只能处理固定大小的对象,一旦对象大小不固定,就会增加其他的逻辑。所有现代的标记-整理回收器均使用滑动整理,它不会改变对象的相对顺序,也就不会影响赋值器的空间局部性。复制式回收器甚至可以通过改变对象布局的方式,将对象与其父节点或者兄弟节点排列的更近以提高赋值器的空间局部性。
集合
相关
知识点
高效的哈希计算这里,hash 是通过 key.hashCode() 计算得到的哈希码,并经过进一步处理(如高位与低位混合)以减少冲突。capacity 是 HashMap 的容量,如果容量是2的幂次方,那么 capacity - 1 的二进制表示形式全是由1组成的数(例如,如果容量是16,那么 capacity - 1 就是15,其二进制表示为这使得 (capacity - 1) & hash 操作非常高效,因为它实际上就是取hash值的低几位作为索引,这是一种快速且有效的位运算操作。简化扩容机制。
数据结构与算法
33,026
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章