查找效率。。。。。。???
如果我有一个数组a[1000000] 里面保存了100万个数据
数组b[100]里面保存了100个数据(假设这100个数据a中都有),现在我想从a中找出b中这100个数据的位置,怎样才能使效率快一些。。。
[解决办法]
多线程,分块查找。。数组a分成N块分别查找
[解决办法]
额。。这样太慢了。。
最快的是建立中间的一个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