基于英文单词的快速HASH索引算法

基于英文单词的快速HASH索引算法

ID:38059392

大小:30.50 KB

页数:3页

时间:2019-05-25

基于英文单词的快速HASH索引算法_第1页
基于英文单词的快速HASH索引算法_第2页
基于英文单词的快速HASH索引算法_第3页
资源描述:

《基于英文单词的快速HASH索引算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于英文单词的快速HASH索引算法因为有项目需要,要做一个类似ispell的软件,其中会产生大量的对单词的查找操作,于是经过一翻研究,得出以下HASH算法,经过验证比一般的查表的FNVHASH算法产生的分布曲线基本没什么两样,并且在大部分的不同字典下,本算法要比查表的FNVHASH算法表现出速度更快,分布更均匀。但是因为是实验结果,所以暂时还没得出有效的数学推论,但是从大量的不同的字典测试数据来看,此算法确实效率不错。由于以前没有涉及过相关的纯算法的设计,所以刚刚开始的时候,打算随便选用一种HASH,比如说用%除大质数,然后借此搭建一个比较强壮的测试环境,然后打算根据

2、测试结果来改进HASH算法的模型。最开始,我的HASH函数是这样的:unsignedinthash_func(char*str,intlen){registerunsignedintsum=0;registerchar*p=str;while(p-str

3、情况:abcd和acbd,对于这两种单词来说,如果用上面的HASH函数,就一定会发生碰撞,为什么呢?因为每个字符少了关于它自己的位置信息,于是第一次改进版本的HASH函数就给每个字符加上了它的位置信息,将上面所描述的函数改进为:unsignedinthash_func(char*str,intlen){registerunsignedintsum=0;registerchar*p=str;while(p-str

4、比不带位置信息产生的分布图要好多了,但是仍然非常的不均匀。那么接来分析产生分布不均匀的原因,因为是用的乘法,所以仍然太过于依赖字母产生的结果了。于是改用XOR操作,选用以下函数:unsignedinthash_func(char*str,intlen){registerunsignedintsum=0;registerchar*p=str;while(p-str

5、line明显比上两张图片平得多了。但是结果仍然非常不好,从800到100的range太大。原因还是因为数据分布得不够均匀,于是思考单独的用加法来算是不是不太好,根据其他查表类HASH算法的过程,发现其大多都用了高低位来组合成最后的结果,于是我也采用了他们的方法:unsignedinthash_func(char*str,intlen){registerunsignedintsum=0;registerunsignedinth=0;registerunsignedshort*p=(unsignedshort*)str;registerunsignedshort*s=(u

6、nsignedshort*)str;while(p-s

7、h)%MAX_PRIME_LESS_THAN_HASH_LEN;}得到最终近似完美的图象:最后得出结论,不用查表的方法,而通过字符串本身的位置对字符本身进行修正的方法也能得到结果相当满意的HASH函数,之后换了几个大小不同的字典进行测试,得出的图象都大致和上图一致,非常令人满意。对于这个项目,包括如何检查单词错误,和自动修正等等相关的内容,会随着项目的完成一一在整理

8、成文档,希望大家支持。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。