在阅读维基百科上的 鸽笼原理时,我发现 - "在哈希表中不可避免地会发生冲突,因为可能的键的数量超过了数组中索引的数量。没有任何聪明的哈希算法可以避免这些冲突"。但是gperf难道不正是在做这件事吗?请解惑。
gperf 根据预定义的字符串列表创建哈希函数和哈希表。 因此,我认为 gperf 创建足够长的哈希值,以便有足够的可能性。 只有在您事先知道每个可能的键时才能这样做 - 这是一个假设,该假设与维基百科条目中的“非常量”哈希表相关。
从gperf网站上得知:"针对一组字符串,它会生成一个哈希函数和哈希表..." - 这意味着它必须预先知道所有的字符串才能准备一个不产生冲突的工作函数。通常在一般编程语言中使用的哈希函数可以处理任何一个输入的字符串(列表并非一次给出),因此它们可能会产生冲突。