在我们正在处理的一些(可怕的第三方)代码中,有一个字典查找例程,它扫描一个填充了“'name-string' - > function_pointer”对的表,基本上从K& R 6.6节复制粘贴。
我必须对此进行扩展,并且在阅读代码时,看似无意义地包含了遍历源数据结构并创建哈希表的哈希例程。
鉴于源数据结构在编译时是固定的(因此在运行时永远不会被添加或更改),那么在那里使用散列例程是否有任何意义?
我只是遇到其中一个时刻我无法判断作者是否做了一些我错过的聪明事,或者是懒惰而没有思考(到目前为止,后者的情况经常发生在不是)。
是否有理由为永远不会改变的数据设置哈希表?
答案 0 :(得分:2)
是否有理由为数据提供永远不会的哈希表 改变?
哈希表代码可能已经存在且工作正常,程序员只想完成工作(例如从字符串中查找函数指针)。如果此功能不是性能关键,我认为没有理由改变它。
如果你想改变它,那么我建议你看一下完美的哈希表。
这些哈希表是从一组固定的预定义密钥创建的哈希函数。关于它们的好处:它们通常比树数据结构更快。
GPERF就是这样做的工具。它从一组字符串创建C代码:https://www.gnu.org/software/gperf/