【发布时间】:2010-11-19 13:26:09
【问题描述】:
在我从事的一个应用程序中,有必要具有这样的功能:
bool IsInList(int iTest)
{
//Return if iTest appears in a set of numbers.
}
编号列表在应用程序加载时是已知的(但在同一应用程序的两个实例之间并不总是相同)并且不会在整个程序中更改(或添加到)。整数本身可能很大并且范围很大,因此拥有vector<bool> 效率不高。性能是一个问题,因为该功能处于热点。我听说过 Perfect hashing,但找不到任何好的建议。任何指针都会有所帮助。谢谢。
附言如果解决方案不是第三方库,我会很理想,因为我不能在这里使用它们。如果可能的话,一些简单到可以理解和手动实现的东西会很棒。
【问题讨论】:
-
我也在尝试了解字符串到数字的完美散列。但是只找到很少的信息:(
-
你确定 O(log n) 查找(例如对排序数组的二进制搜索)不够快吗?请记住散列是 O(k),其中 k 与 n 无关(因此散列在 n 方面是 O(1))但对于非巨大的 n 值仍然可以大于 O(log n)(即少于一百万)。
-
Here 是最小完美哈希查找器的 Java 实现。
-
@Pointy:有趣的是,它调用 C++ 的 OO 特性很奇怪,那么它使用 Java 的四个原因中有两个是 OO。
-
@Fred Nunk 是的,我没有过多关注迷你咆哮;我只是看了一下代码,这似乎至少基本能胜任 - 加上他引用了一些看起来很有趣的论文
标签: c++ performance hash