求2个数组的交集,要求高效率算法

hellogiti 2009-03-20 11:51:49
整数数组不考虑有重复的数。
这样2个数组,求交集。
但是数组非常大,要求效率要高。
交集返回到vectorC
能用的头文件就这些:

#include <vector>

void Test1_1( const vector<int>& vectorA, const vector<int>& vectorB, vector<int>& vectorC )
{
}

用什么算法好?
先排序再穷举?
哈希?
我真分不出哪个快,最好能给出效率O。
代码写出来再加分。
...全文
723 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangshuiling 2009-03-21
  • 打赏
  • 举报
回复

数组非常大就不建议用什么哈希了。
STL中有类似算法,这个轮子就不用楼主自己造了.
先排序sort
再使用set_intersection
  • 打赏
  • 举报
回复
可以考虑位图或者hash,位图简单,但是很耗内存,hash防碰撞更有难度。
hellogiti 2009-03-21
  • 打赏
  • 举报
回复
天哪,你们不能这么欺负我,起码写几行程序啊。
很土 2009-03-21
  • 打赏
  • 举报
回复
Hash算法,设计一个Hash表,尽量做到少碰撞,这样比较现实,同时速度也比较快。
baihacker 2009-03-21
  • 打赏
  • 举报
回复
非常大?那怎么还在内存里能保存得住?
你再大,int也大不过2147483647(32位),小不过-2147483648
可以尝试做一个和二进制位的映射.
内存耗费自己算.
复杂度是O(n)
spirit_sheng 2009-03-21
  • 打赏
  • 举报
回复
位图的时间复杂度是O(n)的,
哈希的时间复杂度近似于O(n)
排序的时间复杂度至少为O(n*log(n))

如果数据量很大,从时间复杂度来说,其本上可以排除排序算法

选择哈希还是位图,就看你数据量到底有多大,
如果整数没有取值范围限制,则位图空间需要 512M
当数据大于 512M / 4 * 0.75 = 96M个数时,使用位图,否则使用哈希
96M = 约相当于1亿。

也就是说数据量大于1亿个时, 使用位图, 小于1亿个时, 使用哈希

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧