最近,在学习hash表;网上想查些应用实例,找到了一些不错的文章。其中,有些人谈到了mpq,关联着hash谈的。所以,也对此做了研究,聊下看法。
首先,列出参考博客:
1、http://blog.csdn.net/v_JULY_v/article/details/6256463
该博文,是通过自己对hash表的认识,谈到了mpq(也是自己的认识)。是一个“消化”过之后的文章,真的很不错。都是自己的思想。
2、http://blog.csdn.net/olncy/article/details/2381497
该博文,是对原英文文章的翻译。我主要对照了下第二章,觉得翻译的还是很到位的。
3、http://sfsrealm.hopto.org/inside_mopaq/index.htm
该网站,是国内对mpq研究的主要“发源”地:国内的很多资料、对mpq的认识,似乎都是来源(或者说参考)于此(国外的,就不知道了)。不过,一般似乎都主要关注第二章。
---------------------------------------------------------------------------------------------------------------
下面,就是谈下自己的看法、认识。(mpq的介绍就不说了,上面的几个已经足够好了)
一、这些文章中,谈的主要是hash表的查找,没有谈hash的创建、构造。这些内容,对mpq的介绍,主要是hash表的应用原理:即查询。他的创建没有特殊的:都是通过hash函数映射到地址,保存记录;如果有冲突,解决冲突,这里用的是“开放地址法”:顺延。但是,在查找的时候,会用到3个hash值:一个是用于映射地址,两个是用于校验:其实,我们一般的校验是直接比较字符串,而这里,是比较两个hash值,如果这两个hash值也相等,才是要找的字符串。
问:在对字符串进行hash映射的时候,是需要遍历字符串的,而且做好几个基本操作;就是说,两个校验hash值,是需要对字符串两次遍历;但是,直接字符串比较是只需要一次遍历。那么,作为追求效率的算法,这里为什么采用“低效”的算法?(肯定有原因,找到原因,那么就不是低效了。所以,低效用引号)
二、应用场景。
看这些博文,大约可以明白应用场景:war3的文件是很多很多的(解压过的人知道),那么,对这些文件名创建hash表,查找方便。另外,似乎还有些“加密”、压缩等原因,但是我理解不了。
问:这个hash表,到底是怎么用的?即价值在哪里?看那3个博文,我还是没找到答案。