b*t
2 楼
给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
里。 怎么做比较快?
HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
好。
RADIX树也是集合稠密的时候没什么优势。
有什么想法没?
里。 怎么做比较快?
HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
好。
RADIX树也是集合稠密的时候没什么优势。
有什么想法没?
g*g
4 楼
l*t
6 楼
any mainstream language has built-in hash functions. Do you have to write
your own hash function?
your own hash function?
k*g
8 楼
S
How many (i.e. what is size of S) ?
Measured in powers of 1024, e.g. 1K, 1M, 1G, 1T, ...
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
N*K
10 楼
哈哈 搞个p的哈希啊
开一块内存 比如 std::array A
首先清零数据
然后 对S立面的任意 x 设置 A[x]=1;
你要节省内存 可以 用 std::array A
A和S放一起
来一个新数字 y 直接查A[y]
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
开一块内存 比如 std::array
首先清零数据
然后 对S立面的任意 x 设置 A[x]=1;
你要节省内存 可以 用 std::array
A和S放一起
来一个新数字 y 直接查A[y]
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
b*s
16 楼
最简单的是先排序,以后都二分查找
这样不需要额外存储,速度也是logn级别的,和一般hash实现没大区别
另外如果很稠密,可以设计个好点的hash函数
比如发现数据有一半在 0-1000,其余的离散
就可以把这段做线性的array,其余的用前述方法
这样查到这一段内的是o(1),其余的是o(logn)
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
这样不需要额外存储,速度也是logn级别的,和一般hash实现没大区别
另外如果很稠密,可以设计个好点的hash函数
比如发现数据有一半在 0-1000,其余的离散
就可以把这段做线性的array,其余的用前述方法
这样查到这一段内的是o(1),其余的是o(logn)
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
w*r
29 楼
前两天我还谷歌地图上查了一下
221B Baker St., London, UK
结果。。。
221B Baker St., London, UK
结果。。。
g*e
34 楼
std::set
N*n
36 楼
Just grab a good template or generic implementation of hash table to
use. No need to code it yourself. A standard hash table should be
designed well enough to handle your use cases.
use. No need to code it yourself. A standard hash table should be
designed well enough to handle your use cases.
w*g
48 楼
如果S是固定的不需要支持插入删除,并且S的取值范围确实很大,可以用perfect hash
,用大量离线计算时间换一点speedup。
你这个总得有一些约束才好优化。如果就一个generic的问题,std::set或者std::
unorderd_set基本上就是最好的了。
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
,用大量离线计算时间换一点speedup。
你这个总得有一些约束才好优化。如果就一个generic的问题,std::set或者std::
unorderd_set基本上就是最好的了。
S
【在 b*******t 的大作中提到】
: 给一个正整数集合S(一个数组) 以及一些整数,需要快速检索这些整数是否在集合S
: 里。 怎么做比较快?
: HASH表应该是比较快, 但是应该怎么设计?比如哈希函数,建哈希表的时候落入同一
: 个BUCKET里的元素怎么组织比较好? 如果S比较稠密的话,好像不太好组织,因为
: BUCKET里面的元素需要在建里的时候排序插入。这样导致数组不好用,用链表性能又不
: 好。
: RADIX树也是集合稠密的时候没什么优势。
: 有什么想法没?
O*a
59 楼
我滴爱
相关阅读
请教python 打开文件的问题!多谢!求推荐一个大家觉得很好的 UML tool:刚下载BOUML,不知道功能,效果如何请教c++ non-vitura interface请教一个static 函数的问题怎么往mysql的数据表里增加一列数据别见笑:一个初级问题:如何把开源open-source的源程序导入Visual studio有python大神吗?紧急求助呀!!谢谢!!!我这个读写文本文件的程序为什么第一次总是出错?有熟悉php的吗?问个文本处理问几个关于网页和HTML的问题请问从pdf文件里提取images在浏览器下执行php copy 命令失败openMP or boost::thread (pthread) for multithreading ?谁给推荐一个C++复习大纲?我写的CUDA屏保软件 (转载)underscore usage in C++ namedba和程序员,哪个是青春饭? (转载)重新编一遍 c++0x江湖救急,问个小白问题请问C++小白问题