hash初探

hash解决的问题:当要判断两个事物是否相等的时候,如果这两个事物包含很多属性信息,我们去一个一个比较这些属性信息,如果全都相等,最后才判断这个事物相等。这样子的话,当要比较很多组事物是否相同的时候,每个事物又包含了很多的信息,这样子的话复杂度一下子就上去了。所以,不如把所有的每个事物的所有属性信息提前映射成一个函数值,这样我们下次去比较两个事物是否相等的时候直接去比较函数值就可以了。

例题:poj3349:题意:每片雪花都有六个角,每个角都有一个长度,现在给出很多片雪花六个角的长度,然后现在问你,每输入一片新的雪花六个角的长度,前面输入的雪花当中是否有与它相等的。两片雪花相同,当且仅当两片雪花以任意一个角开始顺时针或逆时针开始 ,每个角的长度都相同。   思路:咋样才能两个雪花相等——>题目已经给出相等条件----->难道一个一个去比较——>这样太费时间——>不如缩小比较范围,只比较那些长度之和相同,并且长度之积也相同的——>一个hash函数不就构造出来了——>根据hash函数去划分类,每一次输入当前雪花,只到与当前雪花hash函数相等的那个类里去一 一比较雪花。这样搜索的范围小了,复杂度就降下来了。

例题:CH1401:题意:给定一个字符串序列,从中任意选出来两个子序列,判断这两个子序列是否相同。 思路:又是判断两个事物是否相等的问题,而且每个事物里面又包含了很多复杂信息,比如这道题里每个序列就包含了很多字符,如果去判断每个字符是否相同,就太麻烦了,这里不如把每个子序列都映射成一个函数值,然后直接去判断两个子序列的hash值是否相等就可以了。而不用去一个个字符比较了。

猜你喜欢

转载自www.cnblogs.com/rainyskywx/p/10878725.html