当前位置: 首页 > Web前端 > JavaScript

算法导论-字符串匹配

时间:2023-03-26 22:09:18 JavaScript

算法导论字符串匹配篇学习笔记1.NaiveStringMatchingAlgorithmNaiveStringMatchingAlgorithm是一种蛮力匹配算法,其时间复杂度为O(nm),其中n和m为长度分别是文本字符串和模式字符串。该算法的思想是从文本字符串的第一个字符开始,依次与模式字符串的每个字符进行比较。如果匹配成功,则继续比较下一个字符,否则从文本串的下一个字符开始重新匹配。functionsimple_match(s,p){constn=s.length;constm=p.length;如果(n0&&s[i]!==p[j]){j=next[j-1];}}if(s[i]===p[j]){j++;}if(j===m){返回i-m+1;}}return-1;}functiongetNext(p){让m=p.length;让next=newArray(m).fill(0);让j=0;for(leti=0;i0&&p.charAt(i)!==p.charAt(j)){j=next[j-1];}}if(p.charAt(i)===p.charAt(j)){j++;}下一个[i]=j;}returnnext;}4.有限自动机字符串匹配算法有限自动机字符串匹配算法是一种基于有限自动机的字符串匹配算法,其时间复杂度为O(n),其中n为文本字符串的长度。算法的思想是先建立模式串的有限自动机,然后依次扫描文本串中的每一个字符,根据有限自动机的状态转移函数移动指针,完成匹配。有限自动机算法的优点是可以在O(n)时间内完成匹配,不需要计算哈希值,因此比Rabin-Karp算法更稳定。缺点是需要额外的空间来存储有限自动机,所以空间复杂度为O(m^3)。函数finiteAutomatonStringMatching(text,pattern){constn=text.length;constm=pattern.length;constgather=Array.from(newSet(text+pattern));constautomaton=buildFiniteAutomaton(pattern,gather);让j=0;for(leti=0;igather.reduce((ret,c)=>{ret[c]=0;returnret;},{}));自动机[0][模式[0]]=1;for(letq=1;q