查找效率。。。。。。???

addfourliu 2012-09-17 09:26:55
如果我有一个数组a[1000000] 里面保存了100万个数据
数组b[100]里面保存了100个数据(假设这100个数据a中都有),现在我想从a中找出b中这100个数据的位置,怎样才能使效率快一些。。。
...全文
179 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
addfourliu 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

空间换时间?
[/Quote]

可以的,关键是效率。。。
addfourliu 2012-09-17
  • 打赏
  • 举报
回复
追问:不考虑上面所提到的问题
如果我想保存100万个数据,考虑到接下来,要对着100万个数据进行排序,
那么,我们采用什么样的形式对数据进行保存呢?! QList or QVector?

求指导。。。
addfourliu 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

多线程,分块查找。。数组a分成N块分别查找
[/Quote]

啊?还要用到多线程呀。。。
如果我先把a进行一次快排,然后折半查找,效率不知道好不好。。。
shen_wei 2012-09-17
  • 打赏
  • 举报
回复
多线程,分块查找。。数组a分成N块分别查找
  • 打赏
  • 举报
回复
空间换时间?
addfourliu 2012-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
自己写个hash函数。把a的内容映射成一个hash值

[/Quote]

100w个数据,要想高效率的映射到hash表,也不容易操作吧。。。
  • 打赏
  • 举报
回复
额。。这样太慢了。。
最快的是建立中间的一个Hash表。

这样只需要遍历a一遍。b一遍就可以了。当然这需要一定的空间开销但是不大。

为了避免冲突 中间hash表可能会要200W的长度,依情况而定。

伪代码这样

//初始化全部为-1
//遍历a
HashTable table[200W];
for( int i = 0; i < 100W ; i++ )
{
int index = hash_function(a[i]);
table[i] = index;
}

//遍历b
for( int i = 0 ; i < 100 ; i++ )
{
int index = hash_function( b[i] );
if( table[index] != -1 )
{
pinrtf( 找到了。。。);
}
}




自己写个hash函数。把a的内容映射成一个hash值。int

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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