是否有一种算法/方法允许我在不重建数据/重新散列的情况下增加存储桶的数量。
实践中的问题:
假设你有一群用户,他们是由一个字符串“用户名”标识的。
然后将这些“用户名”散列到存储桶列表中。
This is done by something like:
String username = "user";
int index = username.hash();
int bucketIndex = index % bucketlist.size();
因此,在这个方案中,如果我想增加“bucket”的数量,还需要移动bucket中的数据这样它就匹配了一个新的bucket索引,这个索引是用一个不同的数字做模得到的。
这只是一个映射哪里可以找到属于给定用户的bucket。
可能的愚蠢解决方案:
有旧的桶大小和新的桶大小然后试着往两个桶里看。
然后使用new bucketlist.size()缓慢移动所有用户,使其匹配。这不需要在散列和移动时完全停止。
需要什么:
真正糟糕的是所有用户的移动。而且在很多桶里找一个合适的也不理想。
整个要点是,只要使用一个算法,就可以确定列表中要使用哪个bucket。
而且不可能将bucket列表的大小作为用户名的一部分。
它不需要像这里那样进行散列,如果它大致上也这样做的话。
我不知道是否有任何合理的答案…
最佳答案
有什么方法可以将哈希集预先设置为适合数据的大小,从而消除或几乎消除重新散列的需要另外,即使你得到了一些重叠,每一个节点的链表散列或者类似的东西也不会造成太大的伤害,只要冲突不会太深。
关于algorithm - 散列方法,可增加存储桶数量,而不会破坏先前的数据映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5864880/