📣 独立日限时特惠: VIP通行证立减$68
12
返回列表 发新帖
楼主: kellogg
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 用Rolling hash写strStr时遇到了一个奇怪的问题,求解。

🔗
zhuli19901106 2015-6-27 07:51:20 | 只看该作者
全局:
水逼一枚 发表于 2015-6-27 07:29
不好意思,我说反了,是第二个能AC,第一个TLE。只是比较好奇,感觉很诡异。

那就更诡异了(x_x)
还是转而琢磨琢磨kmp、sunday或者bm吧
回复

使用道具 举报

🔗
stellari 2015-6-27 10:40:14 | 只看该作者
全局:
楼主这种计算hash的方法确定不会溢出么?long的取值范围最大是2^63-1, 而29接近于2^5 = 32。那么就算target中所有字符的ascii码都是1,也只需要最多13个字符就能使得hash溢出(因为 (2^5)^13 > 2^63)。溢出以后的值会回卷,变为(hash+2^63) % 2^64 - 2^63也就是说,楼主代码的正确性,应当是建立在

"在长度为K
的所有可能的字符串的hash值的集合M中,取任意hash值H, 那么 (H+2^63) % 2^64 - 2^63)不会和该集合内的所有其他hash值的 (H'+2^63) % 2^64 - 2^63)值重复”。

这点如果不能证明的话,那么就很可能出现这种情况。就是两个字符串本来不相同,但是其中一个的hash值H没有回卷,而另一个hash值H'有回卷。回卷的那个数H'绕了一圈以后恰好又和H相等,这时候就会错误地判定二字符串相等了。

虽然很有可能上述情况并不会出现(base是个质数),但我觉得如果真的要用这种方法的话,还是需要严格证明为佳。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表