我们可以实现用1台杜鹃哈希? [英] Can we implement cuckoo hashing using 1 table?

查看:342
本文介绍了我们可以实现用1台杜鹃哈希?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现关于,他们似乎pretty的良好杜鹃哈希表。
但是,大多数的例子code,我发现这个使用2个表执行。
这似乎是我错了,因为2表可能是在不同的内存页面,我们必须获取随机地址的开销并没有真正的地方。
这难道不是可以使用1阵列,而不是2?
是它也许不可能检测到当一个元件已被踢出2倍和是时间调整大小?

I found about Cuckoo Hash tables and they seem pretty good.
But most examples code I found implement this using 2 tables.
This seems to me wrong because the 2 tables may be in different memory pages and we have overhead of fetching random addresses and have no real locality.
Is it not possible to use 1 array instead of 2?
Is it perhaps not possible to detect when an element has already been kicked out 2 times and is time for resizing?

推荐答案

要回答这个混乱的评论:不,这是不特定的语言。如果你正在考虑内存局部性,并要确保两个表接近,然后通过一次分配是要走的路(但是你分配)。在Java中,这可能会是这样:

To answer the confusion in the comments: no this is not language specific. If you're thinking about memory locality and want to ensure the two tables are close, then a single allocation is the way to go (however you allocate). In java this may look as follows:

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能够合并两个小分配到上飞一个较大的一个 - 无需你执行任何指数魔法

If this performs better than accessing into two separate arrays is dependant on your JVM however: just think about the JIT being able to merge two small allocations into a single larger one on the fly - without you having to perform any index-magic.

这篇关于我们可以实现用1台杜鹃哈希?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆