由买买提看人间百态

topics

全部话题 - 话题: kmp
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
h*********e
发帖数: 91
1
来自主题: JobHunting版 - leetcode 的 strStr 可不可以不用kmp
本来满简单的,一个hay_str.compare(i, needle_len, needle)就出来了。 我知道复
杂度比KMP 高,但是KMP记不住。 真的面试的时候,可不可以不用KMP, 就用一个
compare function阿?
b******g
发帖数: 3616
2
来自主题: JobHunting版 - 能不能讨论一下kmp
也看过不少KMP的讲解,觉得确实是matrix67讲得最清楚。CLRS讲得太生涩。之前刷lc
的strStr()这题是用土办法2 points做的,今天也跟风写了个KMP版的strStr()过了下
lc.
BTW: 今天才发现lc这题的interface改了,以前是返回指针,现在变成返回起始index
了。
vector KMPpreprocessing(char *needle) {
int m = strlen(needle);
// assume j = match[i]: needle[i-j:i] == needle[0:j]
vector match(m,-1);
int j = -1;
for(int i=1; i while(j>=0 && needle[i]!=needle[j+1]) j = match[j];
if(needle[i]==needle[j+1]) j++;
... 阅读全帖
z*******y
发帖数: 578
3
我上个礼拜面Amazon的时候,问到了string matching的,找出一个string在另一个
string中出现的位置,我只稍微提了一下KMP,写程序的时候就用了最直接的 O(mn)的
方法,也没再要求我用KMP实现
h*****1
发帖数: 74
4
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
这是第三个phone interview。 前面两个说挺好。 上来就要写string match 的算法。
前两天自己刚写了个KMP算法,但没有test。所以直接念给他听。这老几首先问我为什
么函数名前要加KMP。我说是个O(m+n)的算法。完了问我为什么要next函数。 接着要我
test, 用 hongkong, kong 两个串。不work, 就说要fail掉我。我无语。他说太复杂
。我说我能保证两点,一,能编译通过,二,算法本身logic是正确的。由于算法本身
复杂,需要debug才work, 我说我可以电话完了后email给他work的code。 他说不需要。
争他妈愤怒。 已经follow了一个月, 很轻易的就fail掉。能有地方抱怨一下吗。找个
工作真不容易。唉。
g*********s
发帖数: 1782
5
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
frankly speaking, i don't think anyone can easily write a bug free kmp in 20
min, unless he's a super bull or he has the existing code in hands.
obviously, your strategy is not very good. u want to impress him. but
obviously he doesn't think u r a super bull.
next time in such situation, just gives the naive algorithm first. give kmp
only when they ask improvement.

要。
h*****1
发帖数: 74
6
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
you are absolutely right。 说实在的,我并不是想impress他, 而是直接就想当然
是KMP。

20
kmp
h*****1
发帖数: 74
7
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
我的感觉是这老几压根就不知道KMP。总问为什么函数名以kmp开始。kmp_next是干什么
用的。
g**e
发帖数: 6127
8
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
Here is my java version
public static void KMP(String target, String pattern) {
boolean found = false;
int[] overlap = getOverlap(pattern);

int j = 0;
for (int i=0; i while (true) {
if (target.charAt(i) == pattern.charAt(j)) {
j++;
if (j =... 阅读全帖
i**********e
发帖数: 1145
9
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
Nobody can know everything. Be humble. You think you know a lot? Even you
can't implement a correct KMP algorithm, so what's the point?
According to Raymond Chen, you are trying too hard...
See what he has to say about KMP vs. the naive method (implemented in C
library):
http://blogs.msdn.com/b/oldnewthing/archive/2006/01/19/514834.a
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
p*****2
发帖数: 21240
10
来自主题: JobHunting版 - 没看出来KMP快呀

那OJ咋办呢?比如storm8那个题,用KMP不快的话,BF过不了,KMP也不一定能过呀。
f*****e
发帖数: 2992
11
来自主题: JobHunting版 - 没看出来KMP快呀
Boyer-More似乎比KMP更快,KMP每个letter都得比较一遍,Boyer-More一看后边不对劲
,前边就不比较了,所以可以节省比较次数。不过这些方法实际都不咋地,最猛的要看
最新的文献。
p*****2
发帖数: 21240
12
来自主题: JobHunting版 - 没看出来KMP快呀

那topcoder的题用KMP怎么就可以解呢?难道专为为了KMP过,BF过不了设计test cases
m******s
发帖数: 165
13
来自主题: JobHunting版 - 没看出来KMP快呀
KMP本身不快,特别对于随机串,实践中往往使用Sunday、BM等算法。。。
有些竞赛题用KMP不是用来完全匹配的,而是用那个前缀函数,因为其计算就意味着建
立了一个自动机。

cases
r*********n
发帖数: 4553
14
来自主题: JobHunting版 - String Match一定要用KMP吗?
BM也可以像KMP那样子用DFA优化吧,这样子理论和实际都比KMP快。
另外也可以RK算法 O(N)。面试让我选,我选RK,coding起来更简单。
c***0
发帖数: 449
15
你直接回到0也可以,只是效率差一些,第二部是利用以前的计算结果,快速找到接下
来该和谁再比。你可以理解为计算Kmp的表格的时候也是kmp算法。
w****3
发帖数: 110
16
来自主题: JobHunting版 - 问一个KMP算法的问题
新手,看了一整天KMP算法,还是没有搞得很清楚。希望大牛给讲讲。
假设一个pattern string p, KMP的第一步是用pattern生成一个next array。根据这
个博客里讲的
http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.h
根据定义next[0]=-1,假设next[j]=k, 即P[0...k-1]==P[j-k,j-1]
1)若P[j]==P[k],则有P[0..k]==P[j-k,j],很显然,next[j+1]=next[j]+1=k+1;
2)若P[j]!=P[k],则可以把其看做模式匹配的问题,即匹配失败的时候,k值如何移
动,显然k=next[k]。
void getNext(char *p,int *next)
{
int j,k;
next[0]=-1;
j=0;
k=-1;
while(j {
if(k==-1||p[j]==p[k]) //匹配的情况下,p[j]... 阅读全帖
r*****s
发帖数: 1815
17
来自主题: JobHunting版 - 关于KMP, Manacher,Morris算法
Manacher并不是一个通用的算法,除了求回文。。你还用它干啥。。。它的功能可以用
后缀树或者后缀数组来代替。所以我没仔细研究过。
KMP的预处理是对pattern中的每个i,找到0-i范围内的等于后缀的最大前缀长度(利用
0-i-1范围内已经求得的结论进行"动态规划"),此数组记录为P[]
在pattern和实际字符串比较失配的时候,设pattern失配位置为i,则0-i-1范围内把等
于后缀的最大前缀移动到后缀位置,即从P[i - 1] 1 位置开始继续比较,若再次失
配,则重复。
KMP算法的思想是很清晰的。
r*****s
发帖数: 1815
18
来自主题: JobHunting版 - 关于KMP, Manacher,Morris算法
为了证明不是胡吹大气附上一个刚写的strstr:
https://gist.github.com/anonymous/a949d6a76f6a72432cfc2c3045e5fb4d


: Manacher并不是一个通用的算法,除了求回文。。你还用它干啥。。。它的功能
可以用

: 后缀树或者后缀数组来代替。所以我没仔细研究过。

: KMP的预处理是对pattern中的每个i,找到0-i范围内的等于后缀的最大前缀长度
(利用

: 0-i-1范围内已经求得的结论进行"动态规划"),此数组记录为P[]

: 在pattern和实际字符串比较失配的时候,设pattern失配位置为i,则0-i-1范围
内把等

: 于后缀的最大前缀移动到后缀位置,即从P[i - 1] 1 位置开始继续比较,若
再次失

: 配,则重复。

: KMP算法的思想是很清晰的。

z*********n
发帖数: 1451
19
来自主题: JobHunting版 - 关于KMP, Manacher,Morris算法

KMP其实不难,理解next数组含义就好。我写过支持通配符?和*的KMP...
Manacher确实没用,面试敢考你投诉他
Morris非常trivial啊,虽然后序比较复杂以外。
btw,以上三个基本100%肯定面试不会让你写代码,你可以提一句表示你知道有这么回
事,展现了你的知识面即可。
r*****s
发帖数: 1815
20
来自主题: JobHunting版 - 关于KMP, Manacher,Morris算法
那我下次有人来onsite就考kmp


: 九章第一节就说了,写strstr不要写kmp,贪心法不考。

: 面试官看不懂,我特意没学。


发帖数: 1
21
来自主题: Military版 - KMP help ...
There are two ways for KMP problem: one is by using finite definite
automation; the other is to use a shift.
Spent a couple of hours on them, still don't quite understand the way to
construct the dfa tables, any experts?
w******k
发帖数: 917
22
网上见过这么多考题
还真没见过KMP, BM之类的string matching算法的
suffix tree就更不用说了
有谁见过考得么?
g*******y
发帖数: 1930
23
主要是不好写,后缀树就不说了,KMP BM虽然是可以能在面试时间内写出来,但是比起
其他普通的面试题要复杂很多,还不容易写正确,尤其如果你没怎么认真复习过。再说
了,既然是现成的算法,也考察不到candidate的思路等方面了。
g*******y
发帖数: 1930
24
Google一下吧,记不住名称,据说比KMP更好
y*******g
发帖数: 6599
25
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
KMP是太复杂了点
你要是不准备也很难现场写出来吧
g*********s
发帖数: 1782
26
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
oh, even worse, your code is not bug free.

20
kmp
g*********s
发帖数: 1782
27
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
that means it's one algorithm level bug...
it's impressive to implement kmp. just get even better prepared next time by implement it clean.
g**e
发帖数: 6127
28
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
this does not look right. you should calculate KMP automata and saved in an
array first. then keep looking up for next char. Not call kmp_next every
time.
h*****1
发帖数: 74
29
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
是的。我没有仔细研究KMP。

an
d**f
发帖数: 264
30
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
面试就是投interviewer所好,很可能他自己都搞不懂KMP
h*****1
发帖数: 74
31
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
愿听其详。
其实我的KMP算法中next函数写错了。这会导致O(mn)的复杂度。但让一个人电话里写这
么多代码,是不是也有病!
g******0
发帖数: 221
32
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
羞愧的问, what does KMP stand for?
g******0
发帖数: 221
33
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
安慰安慰。
请问,what does KMP stand for? What is it? 谢谢。

要。
p*********a
发帖数: 61
34
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
一味做题为导向,就是这个结果
实际工作中,一个简单、明了、好维护的代码,比一些奇怪的技巧更重要
而且,实际的问题几乎都不可能简单划归为所谓经典的算法
知不知道 kmp 并没有这么重要。
面试搞这些教科书上的问题,也是不得已而为之。主要还是看你的基本编程能力
面试还是先写一个直观和正确的代码。
至于优化,有些人关心,有些人不关心。
实际系统中关键的优化,有的是 senior 的人的关心, 多半也轮不到 junior 插手
而如果不是关键问题的话,把 O(n^2) 降到了 O(n) 又有什么关系呢

要。
h*****1
发帖数: 74
35
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
我要是知道写个naive的代码就可以了,怎会伤那脑筋写KMP
问题是,你若不做题。随便给你一个面试题你也做不出来, 不管你有多少年工作经验。
g******0
发帖数: 221
36
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
深有同感。刚才看到KMP detail,才想起来我n年前在课堂上学的, 不然怎么都记不得
。这东西,一般是学string algorithm才会记在心上的(或者是牛人)。确实有拼命做
题的感觉。
但还是祝lz好运。我下个星期也面amazon.还要飞过去。之前都没个点面什么的。从现
在的准备状态来看,和各位点评interview题目的水平一比,觉得自己会很惨。
l*y
发帖数: 21010
37
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
你可以换一个别的算法啊
KMP在实际应用中本来就不如boyer-moore算法
人家可能只接触过后者

要。
c****p
发帖数: 6474
38
来自主题: JobHunting版 - 愤怒,amazon interviewer 不知KMP 算法
据说实际中KMP性能一般

要。
p*****2
发帖数: 21240
39
来自主题: JobHunting版 - 没看出来KMP快呀
leetcode strStr, KMP跟暴力时间差不多呀。一点也看不出来快呀。怎么回事?
w****x
发帖数: 2483
40
来自主题: JobHunting版 - 没看出来KMP快呀

KMP本来就没什么意思
p*****2
发帖数: 21240
41
来自主题: JobHunting版 - 没看出来KMP快呀

可是OJ的时候如果KMP不快的话,怎么通过呢?
w****x
发帖数: 2483
42
来自主题: JobHunting版 - 没看出来KMP快呀

早看KMP不顺眼了....
i******r
发帖数: 793
43
来自主题: JobHunting版 - 没看出来KMP快呀
kmp理论上复杂度低点,但是实际应用的效果没有那么好
f*****e
发帖数: 2992
44
来自主题: JobHunting版 - 没看出来KMP快呀
KMP能过的Boyer-Moure肯定也行。

cases
i******r
发帖数: 793
45
来自主题: JobHunting版 - 没看出来KMP快呀
最近看了一些字符串hash函数
感觉很多情况下用hash可能比kmp啥的快多了
d*k
发帖数: 207
46
来自主题: JobHunting版 - leetcode 的 strStr 可不可以不用kmp
除非诚心做的数据,KMP和暴力算法的效率差不多。
c*****9
发帖数: 4247
47
来自主题: JobHunting版 - 请问 KMP算法重要吗?
因为写起来太复杂了?
那 kmp 还需要复习吗?
l****i
发帖数: 2772
48
来自主题: JobHunting版 - 请问 KMP算法重要吗?
要,现在的公司,问的越来越变态。看懂算法的话,KMP写起来不难。
s*****n
发帖数: 5488
49
来自主题: JobHunting版 - 请问 KMP算法重要吗?
几句话可以说清楚。
1.kmp算法有strstr变化而来。一旦不匹配,不是推到头,而是吧pattern推到另外一个
next array指示的位置,重新开始比较。
2.next array和pattern错开一位匹配而来,一旦开始匹配,顺序++,一旦不匹配,清零
重来。
例如:
ababaca
0012301
其实主要靠的逻辑和编码能力。
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)