《字符串hash以及7大问题1.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《字符串hash以及7大问题1.ppt《字符串hash以及7大问题1.ppt《字符串hash以及7大问题1.ppt

1 By peterpan 字符串hash简介 有关字符串hash的 7个问题! Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 字符串hash 关于字符串hash,就一句话: 把字符串有效地转化为一个整数 在计算机里,用的是二进制编码。在很多语言里,都是用数字作为数组的下标。因为用数字来存储、表达一个object非常方便。 如果能有一种算法,把每个字符串有效地、”唯一”的映射到每个“不同”的整数,我们就能很好的处理字符串。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. hash函数 现在我们希望找到一个hash函数,使得每一个字符串都能够映射到一个整数上 比如hash[i]=(hash[i-1]*p+idx(s[i]))%mod 字符串:abc,bbc,aba,aadaabac 字符串下标从0开始 先把a映射为1,b映射为2,c-3,d-4,即idx(a)=1, idx(b)=2, idx(c)=3,idx(d)=4; 好!开始对字符串进行hash Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. hash函数 假设我们取p=13 ,mod=101 先把abc映射为一个整数 hash[0]=1,表示 a 映射为1 hash[1]=(hash[0]*p+idx(b))%mod=15,表示 ab 映射为 15 hash[2]=(hash[1]*p+idx(c))%mod=97 这样,我们就把 abc 映射为 97 这个数字了。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. hash函数 用同样的方法,我们可以把bbc,aba,aadaabac都映射到一个整数 用同样的hash函数,得到如下结果 abc - 97 bbc - 64 aba - 95 aadaabac - 35 那么,我们发现,这是一个字符串到整数的映射 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. hash函数 这样子,我们就可以记录下每个字符串对应的整数,当下一次出现了一个已经出现的字符串时,查询整数是否出现过,就可以知道 字符串是否重复出现。 现在要判断两个字符串是否一致,怎么办呢?直接用它们的hash值判断即可,若hash值一致,则认为字符串一致; 若hash值不一致,则认为是不同的字符串。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. hash 我们要判断两个字符串是否一致,没有那么麻烦,直接先判断长度是否一致,然后再判断每个对应的字符是否一致即可。 但,如果要判断多个字符串里有多少个不同的字符串,怎么办呢? 两两字符串都进行比较?时间复杂度太高 把每个字符串hash成一个整数,然后把所有整数进行一个去重操作,即可知道答案了。 我们来具体看下这个问题。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 关于hash的简单问题 问题: 给N个字符串,每个字符串长度不超过100,问这些字符串里有多少个不同的字符串? 即相同字符串只取一个,最后剩下多少字符串? 数据范围:1=N=100000 字符集:小写英文字母(a-z) Evaluation only. Created with Aspose.Slides for .N

文档评论(0)

jizi6339 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档