在一些(可怕的第 3 方)代码中,我们正在使用一个字典查找例程,该例程扫描填充有“'name-string' -> function_pointer”对的表,基本上是复制- 从 K&R 第 6.6 节粘贴。
我不得不对此进行扩展,在阅读代码时,似乎包含了遍历源数据结构并创建哈希表的哈希例程,这让我感到震惊。
鉴于源数据结构在编译时是固定的(因此在运行时永远不会添加或更改),在其中使用哈希例程是否有意义?
我只是有这样的时刻之一,我无法判断作者是否在做一些我错过的聪明的事情,或者是懒惰而不思考(到目前为止,后者的情况比不是)。
是否有理由为永远不会更改的数据创建哈希表?
最佳答案
Is there a reason to have a hash table for data that will never change?
可能哈希表代码已经存在并且工作正常,而程序员只是想完成工作(例如,从字符串中查找函数指针)。如果此函数不是性能关键,我认为没有理由更改它。
如果要改,那我建议看一下完美哈希表。
这些是哈希表,哈希函数是从一组固定的预定义键创建的。它们的优点:它们通常比树数据结构更快。
GPERF 就是一个可以做到这一点的工具。它从一组字符串创建 C 代码:https://www.gnu.org/software/gperf/
关于c - 字典查找——为什么要对固定数据使用哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21410009/