我们可以使用1个表实现布谷鸟哈希吗?

吉姆

我发现了有关杜鹃哈希表的表,它们看起来还不错。
但是我发现的大多数示例代码都是使用2个表实现的。
在我看来,这是错误的,因为2个表可能位于不同的内存页中,并且我们有获取随机地址的开销,并且没有实际的位置。
不能使用1个数组而不是2个数组吗?
是否可能无法检测到何时元素已被踢出2次以及是否需要重新调整大小?

贝耶勒工作室

要回答评论中的困惑:不,这不是特定于语言的。如果您正在考虑内存的局部性,并希望确保两个表都关闭,那么进行单次分配是可行的(无论如何分配)。在Java中,它可能如下所示:

class TwoTables {
    private static final int SIZE_TABLE_FIRST = 11, SIZE_TABLE_SECOND = 29;

    public TwoTables() {
        m_buffer = new int[SIZE_TABLE_FIRST + SIZE_TABLE_SECOND];
    }

    // consider similar setters...

    public int getFirst(int key) {
        return m_buffer[toIndex(hashFirst(key), SIZE_TABLE_FIRST, 0)];
    }

    public int getSecond(int key) {
        return m_buffer[toIndex(hashSecond(key), SIZE_TABLE_SECOND, SIZE_TABLE_FIRST)];
    }

    private static int toIndex(int hash, int mod, int offset) {
        return hash % mod + offset;
    }

    private static int hashFirst(int key) { return ...; }
    private static int hashSecond(int key) { return ...; }

    private final int[] m_buffer;
}

但是,如果这要比访问两个单独的数组要好,则取决于您的JVM:只需考虑一下JIT是否能够将两个小的分配动态合并到一个较大的单个分配中,而无需执行任何索引魔术。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以使用Notepad ++解码URL吗?

来自分类Dev

我们可以使用iscroller一次滚动固定3个列表项吗?

来自分类Dev

我们可以在绑定的哈希上使用Storable的store方法吗?

来自分类Dev

我们可以使用两个页面之间的IndexdDB对象存储吗

来自分类Dev

我们可以使用继承实现链接列表吗?

来自分类Dev

我们可以使用SQLite3在Ruby的查询中将db表的名称设置为变量吗?

来自分类Dev

布谷鸟哈希中的“新哈希函数”是什么?

来自分类Dev

我们可以使用单个指针实现双向链接列表吗?

来自分类Dev

我们可以使用内联模板而不使用任何类型的路由吗?

来自分类Dev

我们可以使用一个RowMapper对象而不是每次创建对象来获取结果吗?

来自分类Dev

我们可以使用Spring Boot来实现Java库吗?

来自分类Dev

我们可以使用Ionic 2和AngularJs 1吗?

来自分类Dev

我们可以使用名称空间实现封装吗?

来自分类Dev

我们可以使用Ember.js建立一个静态网站吗?

来自分类Dev

我们可以使用Renderscript来实现代码的面向安全性的部分吗?

来自分类Dev

我们可以使用类作为标题吗

来自分类Dev

我们可以使用继承来实现链接列表吗?

来自分类Dev

没有mapbox GL的矢量图块,我们可以使用传单1 Beta吗?

来自分类Dev

布谷鸟过滤器:为什么要精确计数7个?(与实体插入的“有限数量”相同。)

来自分类Dev

我们可以使用虚拟机建立一个对世界开放的服务器吗?

来自分类Dev

我们可以使用 spring 集成在 mosquitto 中批量处理 10 个消息加载组吗

来自分类Dev

我们可以使用动态管道吗?

来自分类Dev

我们可以使用 KnpPaginatorBundle 在 Symfony 4 中创建基于 2 个实体的分页吗?

来自分类Dev

我们可以使用 django canvas 来运行 2 个组并行任务来执行 celery 任务吗

来自分类Dev

我们可以使用数组的最后一个元素吗?

来自分类Dev

我们可以使用 apache spark 为斐波那契数列实现并行代码吗

来自分类Dev

我们可以使用“创建新的 BigQuery 表作为触发运行预定义 BigQuery 查询的事件”吗?

来自分类Dev

我们可以使用执行 Sql 任务截断 Excel 工作表中的数据吗?

来自分类Dev

我们可以使用sed用多个变量替换一个变量吗

Related 相关文章

  1. 1

    我们可以使用Notepad ++解码URL吗?

  2. 2

    我们可以使用iscroller一次滚动固定3个列表项吗?

  3. 3

    我们可以在绑定的哈希上使用Storable的store方法吗?

  4. 4

    我们可以使用两个页面之间的IndexdDB对象存储吗

  5. 5

    我们可以使用继承实现链接列表吗?

  6. 6

    我们可以使用SQLite3在Ruby的查询中将db表的名称设置为变量吗?

  7. 7

    布谷鸟哈希中的“新哈希函数”是什么?

  8. 8

    我们可以使用单个指针实现双向链接列表吗?

  9. 9

    我们可以使用内联模板而不使用任何类型的路由吗?

  10. 10

    我们可以使用一个RowMapper对象而不是每次创建对象来获取结果吗?

  11. 11

    我们可以使用Spring Boot来实现Java库吗?

  12. 12

    我们可以使用Ionic 2和AngularJs 1吗?

  13. 13

    我们可以使用名称空间实现封装吗?

  14. 14

    我们可以使用Ember.js建立一个静态网站吗?

  15. 15

    我们可以使用Renderscript来实现代码的面向安全性的部分吗?

  16. 16

    我们可以使用类作为标题吗

  17. 17

    我们可以使用继承来实现链接列表吗?

  18. 18

    没有mapbox GL的矢量图块,我们可以使用传单1 Beta吗?

  19. 19

    布谷鸟过滤器:为什么要精确计数7个?(与实体插入的“有限数量”相同。)

  20. 20

    我们可以使用虚拟机建立一个对世界开放的服务器吗?

  21. 21

    我们可以使用 spring 集成在 mosquitto 中批量处理 10 个消息加载组吗

  22. 22

    我们可以使用动态管道吗?

  23. 23

    我们可以使用 KnpPaginatorBundle 在 Symfony 4 中创建基于 2 个实体的分页吗?

  24. 24

    我们可以使用 django canvas 来运行 2 个组并行任务来执行 celery 任务吗

  25. 25

    我们可以使用数组的最后一个元素吗?

  26. 26

    我们可以使用 apache spark 为斐波那契数列实现并行代码吗

  27. 27

    我们可以使用“创建新的 BigQuery 表作为触发运行预定义 BigQuery 查询的事件”吗?

  28. 28

    我们可以使用执行 Sql 任务截断 Excel 工作表中的数据吗?

  29. 29

    我们可以使用sed用多个变量替换一个变量吗

热门标签

归档