查看: 1270| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] leetcode 28. Implement strStr() running time 问题分析

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
原题如下
Implement strStr().

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2
Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1
对于这个题目,根据算法导论的分析,如果用naive算法,runningtime 应该是O((n-m+1)*m)
如果用kmp算法,preprocess + match 总共的runningtime 应该是O(m)+O(n)~O(n+m)
那么KMP vs naive 哪个running time 更小呢?
f(m,n)=n+m-(n-m+1)*m
=m^2-n(m-1)
假设n+m<(n-m+1)*m
=>   f(m,n)<0
=>  m^2<n(m-1)
=>  n>m^2/(m-1)
n=m时 很明显 n< m^2/(m-1);
n=m+1 时 n-m^2/(m-1)=m+1-m^2/(m-1)=-1/(m-1)<0 => n< m^2/(m-1);
n>=m+2 时 n-m^2/(m-1)>=m+2-m^2/(m-1)=(m-2)/(m-1)  有 m>2 时 n>m^2/(m-1)
而在leetcode 我用两种方法提交过,发现,KMP算法的running time 要比 朴素算法长。
根据上述推理,我大胆推测,可能是leetcode的test case存在大量的 n=m+1 的情况导致 用 朴素算法 的running time 反而比KMP算法的小。

欢迎大家拍砖指正,踊跃讨论~


评分

参与人数 1大米 +5 收起 理由
tony213 + 5 给你点个赞!

查看全部评分


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

本版积分规则

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