程序描绘人生
知识改变命运,学习成就未来。
C++博客
新随笔
联系
聚合
管理
随笔 - 89 文章 - 118 trackbacks - 0
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
留言簿
(16)
给我留言
查看公开留言
查看私人留言
随笔分类
(56)
C++(3)
hadoop(1)
NodeJS(1)
NSIS安装包(1)
Windows开发(2)
电子支付
高性能服务器(1)
架构设计(5)
搜索引擎(8)
算法(12)
研发管理(15)
转载(7)
随笔档案
(89)
2018年6月 (1)
2018年2月 (1)
2017年5月 (1)
2017年1月 (1)
2016年7月 (1)
2016年5月 (1)
2016年1月 (1)
2015年12月 (1)
2015年2月 (1)
2014年8月 (1)
2014年5月 (4)
2014年2月 (1)
2013年11月 (3)
2013年9月 (3)
2013年8月 (4)
2013年6月 (1)
2013年5月 (1)
2013年4月 (1)
2013年2月 (1)
2012年12月 (15)
2012年11月 (6)
2012年10月 (1)
2012年9月 (2)
2012年8月 (1)
2012年3月 (2)
2011年12月 (1)
2011年11月 (1)
2011年9月 (1)
2011年8月 (1)
2011年7月 (1)
2011年5月 (1)
2010年12月 (1)
2010年9月 (1)
2010年8月 (2)
2010年7月 (1)
2010年3月 (1)
2009年12月 (2)
2009年11月 (2)
2008年9月 (1)
2008年8月 (4)
2008年7月 (3)
2008年5月 (1)
2008年4月 (1)
2008年3月 (2)
2008年2月 (2)
2007年12月 (2)
2007年9月 (1)
文章分类
C++
技术随笔
推荐博客
在你身边
胡满超的非技术博客
搜索
最新随笔
1. LeetCode – Median of Two Sorted Arrays - findMedianSortedArrays
2. 深入浅出LSH
3. LSH Locality-Sensitive Hashing 局部敏感哈希算法总结
4. R语言预测实战源代码 Predictive Practice With R source code
5. 程序员如何转型做大数据
6. 实战java高并发程序设计 源代码 source code
7. spark机器学习 源代码 Machine Learning With Spark source code
8. 机器学习算法原理与编程实践 代码下载地址
9. 转: 国标一级和国标二级汉字
10. 软件架构设计要点
11. Exception in thread "main" java.lang.ClassNotFoundException: WordCount
12. 转:高性能服务端编程知识点梳理图解
13. nodejs socket is connect
14. 转:CTime与CString相互转化
15. 转:一个故事告诉你比特币的原理及运作机制
16. 这就是搜索引擎-笔试6-链接分析
17. 这就是搜索引擎-笔试5-检索模型与搜索排序
18. 这就是搜索引擎-笔试4-索引压缩
19. 这就是搜索引擎-笔试3-搜索引擎索引
20. 这就是搜索引擎-笔试2
最新评论
1. re: 迷宫最短路径问题解析
@rover
这个是C++模板
--胡满超
2. re: 迷宫最短路径问题解析
stack<Postion> path__;
这个里面 ”<> “符号是什么意思?我在C++语言里面没见过呢? 初学者,大神勿喷。
--rover
3. re: 机器学习算法原理与编程实践 代码下载地址
跪谢大神了,帮了我很多
--naomi
4. re: 如何在NSIS中执行BAT文件
@humanchao
我想试试软件
--舒
5. re: 判断单链表是否存在环,判断两个链表是否相交问题详解
n只可能是1
--lookdown
6. re: 判断单链表是否存在环,判断两个链表是否相交问题详解
当fast若与slow相遇时,slow肯定没有走遍历完链表@科匠
那有没有可能slow已经走了多于一圈了呢?
--gqqnbig
7. re: 迷宫最短路径问题解析
。。。。。。。。
--11
8. re: 转:CTime与CString相互转化
看起来很简练啊 @杨粼波
--胡满超
9. re: 转:CTime与CString相互转化
评论内容较长,点击标题查看
--杨粼波
10. re: VC取得目录大小[未登录]
GetDiskFreeSpaceEx获得的是驱动器实际占用的空间,而下面代码获得的是目录大小,请问如何获得目录实际占用的空间? sinee3000@sina.com
--xy
阅读排行榜
1. 判断单链表是否存在环,判断两个链表是否相交问题详解(34757)
2. 机器学习算法原理与编程实践 代码下载地址(24011)
3. spark机器学习 源代码 Machine Learning With Spark source code(21814)
4. 实战java高并发程序设计 源代码 source code(19976)
5. 转:几种MFC对话框的隐藏方法(10740)
6. 单链表逆序输出(10331)
7. VC中取得毫秒级的时间(9790)
8. 迷宫最短路径问题解析(8818)
9. 深入浅出LSH(8777)
10. Exception in thread "main" java.lang.ClassNotFoundException: WordCount(7445)
字符串常见算法之一:查找一个短串在一个长串中位置
介绍的一些字符串处理的问题在日常编程中比较常见,但是在大学读书的时候几乎一个都没有涉及,最近学习了一下在这里介绍给大家,仅供参考。
这些算法与内容包括:
1、 查找一个短串在一个长串中位置;
2、 查找一个字符串中最长的重复子串;
3、 查找一个字符串中重复最多的子串;
4、 两个字符串最长的公共子串(连续);
5、 两个字符串最长的公共子序列(不连续);
6、 介绍一种强大的数据结构,Suffix tree.
这里有一个PPT:
http://www.cppblog.com/Files/humanchao/StringAlg.zip
-------------------------------------------------
查找一个短串在一个长串中位置
这个问题传统的解法时间复杂度为O(m*n),m、n为两个串的长度。有一个Sunday算法,可以最大限度的优化这个比较过程,原理如下:
1、建立一个hash table,依次把search各个字符值作为table索引,为table相应的位置一个值(表示字符存在),如果出现重复,后面的位置会覆盖前面的位置。
例:我们要在"WHICH-FINALLY-HALTS.—AT-THAT-POINT"(简称string)查找" AT-THAT "(简称pat),刚开始时,把pat与string对齐,查看串string中与串pat 相对应的字符(F),在pat的位置,这个查找的过程时间复杂度通过hash table的下标索引为 O(1):
2、如果发现没有,说明字符F之前已经无法与pat匹配,直接跳到position(F)+stringlength(pat)
3、发现”-”在pat位置3,于是重新定位对齐两串为:
4、倒序(从最后一个向前)比较两串,发现无法匹配,继续跳转->查找->定位
因为上面已经有一个T匹配成功,这次要从HALTS的S来查找,于是定位为:
5、上图无法匹配,从”--AT-“中A后的”-”继续查找,重复上过程,最终匹配如图:
这个算法关键点:
1、建立为pat建立hash表,以提高查找字符的速度;
2、对齐跳转,快速的后移比较,使比较次数减少。
具体的代码实现可以参考链接:
http://blog.csdn.net/unicode1985/archive/2007/05/30/1631038.aspx
posted on 2009-11-25 17:20
胡满超
阅读(3118)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理