使用可能重复的键调整单独链接的哈希表的大小

时间:2013-02-22 15:11:41

标签: c resize hashtable

在用C编写的哈希表的单独链接实现中,我允许以LIFO顺序插入和删除重复键。

调整表格大小(加倍大小)的条件是每个列表平均包含10个项目。代码看起来像这样:

void maybeExpand(Hashtable* table)
{
    if (table->items < table->lists * 10)
        return;

    /* resize */
}

请注意,我将项目数与列表数之间的比率进行比较,而不是哈希表的整个容量。

问题是当表只包含重复的键并且每个列表的平均项数大于10.调整大小不会改变列表的数量和项目的数量,因此哈希表只会保留正在调整大小。

我想知道在散列表中是否允许重复键是一个很好的决定,如果是这样,在上述情况下该怎么做?

1 个答案:

答案 0 :(得分:0)

是否需要一个允许每个键有多个值的哈希表或者只需要覆盖的哈希值取决于情况,如果对如何使用哈希表有疑问,可以使用某种类型的开关来提供两者。

很难预测所有条目都被散列到相同的 hashbucket 的情况。在任何情况下选择良好的哈希函数都是一项很好的投资;但一般来说,你应该只针对平均情况进行优化,而不是最坏情况。