预备谈谈下面这些,可能有补充

KMP算法的用途;

KMP算法之前的暴力;

KMP算法预备知识与概念;

KMP算法模板:

KMP算法的习题。


1.KMP算法的用途:

主要用于模式匹配(字符串匹配)。给定一个长的字符串(target string)和一个短的字符串(pattern string),要求判断pattern string是否是target string的子串,若是,则返回子串的首个字符的下标,若否,则返回-1。


2.KMP算法之前的暴力:

解决这个问题最常想到的办法是brute force,即从target string第一个字符开始与pattern字符比较,如果相等则比较target string和pattern string的下一个字符,若不等则返回到target string中相等的字符的下一个字符。换句话说,假设我们用target和pattern分别表示两个字符串的指针,那么每一次比较不管两个string匹配到何种程度,只要不是完全匹配,那么target永远只能增加1,这个算法的复杂度为O(mn)。

m = strlen(target string)

n  = strlen(pattern string)

而这个接近n2的算法在n与m较大时显得非常效率低下。于是KMP算法粉墨登场,其实KMP算法与BF算法的区别在于KMP算法巧妙地消除了指针i的回溯问题,只需要确定下次匹配j的位置即可,是的问题复杂度由O(mn)下降到O(m+n)


最新文章

  1. Python-11-RabbitMQ、Redis使用
  2. MINA系列学习-IoAccpetor
  3. Ado.net中简单的DBHelper类(增删改查)
  4. angularjs学习笔记—工具方法
  5. ubuntu 休眠之后网络间接失败 can not connect to network after suspend (wake up)
  6. Java 第三天 Gradle和其它
  7. [译]AMQP 0-9-1 Quick Reference : basic
  8. 了解undefined、null、NaN的区别
  9. Python Selenium设计模式-POM
  10. [oracle]查询一个表中数据的插入时间
  11. python之元组
  12. Linux 三剑客 -- awk sed grep
  13. tomcat 配置 使用 HTTPS
  14. Linux虚拟文件系统
  15. WPF触发器(Trigger)
  16. Go Revel - main函数分析
  17. 递归实现tree JQuery
  18. 用 #include “filename.h” 格式来引用非标准库的头文件
  19. 收藏Linux命令
  20. plsql programming 01 plsql概述

热门文章

  1. RAID与LVM磁盘阵列技术
  2. greenplum-时间处理
  3. spark的flatMap和map区别
  4. laravel5.2总结--服务提供者,契约(Contracts)
  5. IOS开发学习笔记024-UIButton和UIImageView的区别
  6. PHP FILTER_VALIDATE_IP 过滤器
  7. web项目中各种路径的获取(复制,为以后好找资源)
  8. mvcs项目搭建
  9. Proteus中常用元器件名字
  10. try 与catch的作用