zoukankan      html  css  js  c++  java
  • String 匹配算法第32章 分类: 算法导论 20110303 10:43 193人阅读 评论(0) 收藏

    1.navite string 算法:

    基本就是一个一个匹配,对于不太长的字串来说,效率还行。

    效率:O ((n - m + 1)m )

    算法伪代码:

    NAIVE-STRING-MATCHER(T, P)
    1 n ← length[T]
    2 m ← length[P]
    3 for s ← 0 to n - m
    4     do if P[1 ‥ m] = T[s + 1 ‥ s + m]
    5           then print "Pattern occurs with shift" s
    C语言实现:
    2. Rabin-Karp 算法 主要思想是,如果字符串相同,则他们的和一定相同。由于字符串的和会超过32位,更进一步,他们和的模一定相同,既同余。
    也就是排除法,先排除不可能的,在比较有可能的位置。 最坏情况: Θ((n - m + 1)m) 伪代码: RABIN-KARP-MATCHER(T, P, d, q) 1 n ← length[T] 2 m ← length[P] 3 h ← dm-1 mod q 4 p ← 0 5 t0 ← 0 6 for i ← 1 to m ▹ Preprocessing. 7 do p ← (dp + P[i]) mod q 8 t0 ← (dt0 + T[i]) mod q 9 for s ← 0 to n - m ▹ Matching. 10 do if p = ts 11 then if P[1 ‥ m] = T [s + 1 ‥ s + m] 12 then print "Pattern occurs with shift" s 13 if s < n - m 14 then ts+1 ← (d(ts - T[s + 1]h) + T[s + m + 1]) mod q d,q取任意质素, q ≥ m
    C语言实现:

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    创建基于MailKit和MimeKit的.NET基础邮件服务
    MailKit---获取邮件
    C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
    .net 开源 FTP 组件 edtFTPnet
    Consul1-window安装consul
    通信传输利器Netty(Net is DotNetty)介绍
    工作中,如何衡量一个人的 JavaScript 编码水平?
    10个有趣又能编译为JavaScript的语言,你用过哪些?
    一定要你明白Java中的volatile
    面试总被问到HTTP缓存机制及原理?看完你就彻底明白了
  • 原文地址:https://www.cnblogs.com/deman/p/4716596.html
Copyright © 2011-2022 走看看