相关疑难解决方法(0)

有没有办法让这个哈希查找更快?

我要求(非常)快速处理有限范围的字符串,统计它们的值.输入文件的格式如下:

January    7
March     22
September 87
March     36
Run Code Online (Sandbox Code Playgroud)

等等.因为线宽是相同的,所以我可以简单fread快速地阅读一行,并且我开发了一个完美的散列函数,但是我想知道是否有人可以提供任何关于如何使它更快的建议.我将介绍每个建议,看看它是怎么回事.

散列函数基于月份名称,以允许将值快速分配给存储桶.跟我来这儿.我首先想出了完美哈希的最小字符数:

January
February
March
April
May
June
July
August
September
October
November
December
Run Code Online (Sandbox Code Playgroud)

请记住,月是所有九个字符由于我拥有整个输入线.

不幸的是,没有一个列标记一个月的唯一.第1列重复J,第2列重复a,第3列重复r,第4列重复u,第5列向前复制<space>(还有其他重复但有一个足以阻止单列散列键).

但是,通过使用第一和第四列,我得到的值Ju,Fr,Mc,Ai,M<space>,Je,Jy,Au,St,Oo,NeDe,这是独一无二的.此文件中没有无效值,因此我不必担心输入数据的存储桶不正确.

通过查看字符的十六进制代码,我发现通过与策略值进行AND运算可以获得较低的唯一值:

FirstChar  Hex  Binary     &0x0f
---------  ---  ---------  -----
   A       x41  0100 0001      1 …
Run Code Online (Sandbox Code Playgroud)

c optimization perfect-hash

19
推荐指数
2
解决办法
905
查看次数

标签 统计

c ×1

optimization ×1

perfect-hash ×1