[Algorithm]查找
一.查找的算法
1.顺序查找
1 int Search_Seq( SeqList L, ElemType elem )
2 {
3 L.elem[0] = elem;
4 for ( int i = L.length; L.elem[0].key != L.elem[i].key; i-- );
5 return i;
6 }
2.折半查找(二分查找)
1 int Binary_Search( SeqList L, ElemType elem )
2 {
3 int low = 1, high = L.length;
4 while (low <= high)
5 {
6 int mid = ( low + high ) / 2;
7 if ( elem.key == L.elem[mid].key )
8 return mid;
9 else if ( elem.key < L.elem[mid].key )
10 high = mid - 1;
11 else
12 low = mid + 1;
13 }
14 return 0;
15 }
3.折半查找(二分查找)递归
1 int Binary_search_RC( SeqList L, ElemType elem, int low, int high )
2 {
3 if ( low > high ) return 0;
4 int mid = ( low + high ) / 2;
5 if ( elem.key == L.elem[mid] ) return mid;
6 else if ( elem.key < L.elem[mid] ) high = mid - 1;
7 else low = mid + 1;
8 return Binary_search_RC( L, elem, low, high );
9 }
二.字符串匹配
1.简单的模式匹配算法(朴素模式匹配算法)
1 int Index( SString S, SString T )
2 {
3 int i = 1, j = 1;
4 while ( i <= S[0] && j <= T[0] )
5 {
6 if ( S[i] == T[j] ) { i++; j++; }
7 else { i = i - j + 2; j = 1; }
8 }
9 if ( j > T[0] ) return i - T[0];
10 return 0;
11 }
2.KMP算法
算法需要先求出模式串的next值:
1 void get_next( SString T, int next[] )
2 {
3 int i = 1, j = 0;
4 next[1] = 0;
5 while (i<=T[0])
6 {
7 if (j==0||T[i]==T[j] )
8 {
9 i++; j++; next[i] = j;
10 }
11 else j = next[j];
12 }
13 }
也可求出改进后的nextval值:
1 void get_nextval( SString T, int nextval[] )
2 {
3 int i = 1, j = 0;
4 nextval[1] = 0;
5 while ( i <= T[0] )
6 {
7 if ( j == 0 || T[i] == T[j] )
8 {
9 i++, j++;
10 if ( T[i] == T[j] )
11 nextval[i] = nextval[j];
12 else
13 nextval[i] = j;
14 }
15 else j = nextval[j];
16 }
17 }
以下是KMP算法:
1 int KMP( SString S, SString T, int next[], int pos )
2 {
3 int i = pos, j = 1;
4 while ( i<=S[0]&&j<=T[0] )
5 {
6 if ( j == 0 || S[i] == T[j] ) { i++; j++; }
7 else j = next[j];
8 }
9 if ( j > T[0] ) return i - T[0];
10 return 0;
11 }
[Algorithm]查找的更多相关文章
- Sunday算法(字符串查找、匹配)
字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上,KMP算法并不比最简单的 ...
- 文本比较算法三——SUNDAY 算法
SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...
- 字符串匹配的sunday算法
sunday算法核心思想:启发式移动搜索步长! SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).这里介 ...
- Sunday字符串匹配算法
逛ACM神犇的博客的时候看到的这个神奇的算法 KMP吧,失配函数难理解,代码量长 BF吧,慢,很慢,特别慢. BM吧,我不会写... 现在看到了Sunday算法呀,眼前一亮,神清气爽啊. 字符串匹配算 ...
- [Data Structure & Algorithm] 七大查找算法
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...
- STL中algorithm里的查找
首先,选择查找算法时,区间是否排序是一个至关重要的因素.可以按是否需要排序区间分为两组: A. count,find B. binary_search,lower_bound,upper_bound, ...
- 【algorithm】 二分查找算法
二分查找算法:<维基百科> 在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)[1].对数搜索(英语:logari ...
- 【Algorithm】二分查找
今天在学习<编程之美>的时候,看到一个二分查找的题目,发现原来我真的不懂二分查找. 二分查找时候注意的事项: 在求二分查找的中间点时没有使用 midIndex = (minIndex + ...
- 《算法C语言实现》————快速-查找算法(quick-find algorithm)
算法基础是一个整型数组,当且仅当第p个元素和第q个元素相等时,p和q时连通的.初始时,数组中的第i个元素的值为i,0<=i<N,为实现p与q的合并操作,我们遍历数组,把所有名为p的元素值改 ...
随机推荐
- 360良心制作fonts.useso.com
我们的网站,经常会用到google的一些数据. 但在国内无法使用google, 360这个良心的企业,解决了这个问题. 把google替换成useso就可以了. 比如, <link href=& ...
- DevOps介绍
DevOps 也同样要通过技术工具链完成持续集成.持续交付.用户反馈和系统优化的整合.Elasticbox 整理了 60+ 开源工具与分类,其中包括版本控制&协作开发工具.自动化构建和测试工具 ...
- java mutilThread
可以参考https://www.cnblogs.com/wxd0108/p/5479442.html 这里补充一下我理解多线程这部分的一些要点. 1.首先是java的monitor概念:https:/ ...
- SQL SERVER常用的统计用法
--查询各个状态下总数SET statistics time on Go SELECT END ) AS Q1, END ) AS Q2, END ) AS Q3, END ) AS Q4, END ...
- py编码终极版
说起python编码,真是句句心酸.算起来,反复折腾两个来月了.万幸的是,终于梳理清楚了.作为一个共产主义者,一定要分享给大家.如果你还在因为编码而头痛,那么赶紧跟着我咱们一起来揭开py编码的真相吧! ...
- Python技巧(一)
一 if..else的多种写法 a, b, c = 1, 2, 3 1.常规 if a > b: c = a else: c = b 2.表达式 c = a if a > b else ...
- Android 4 学习(11):Intent简介
参考<Professional Android 4 Development> Intents 本文主要从这几个方面介绍Intents: 使用Intents在Android程序内部或外部通信 ...
- Tornado 高并发源码分析之六---异步编程的几种实现方式
方式一:通过线程池或者进程池 导入库futures是python3自带的库,如果是python2,需要pip安装future这个库 备注:进程池和线程池写法相同 from concurrent.fut ...
- 如何在Less中使用使用calc
文章转载自 琼台博客:http://www.qttc.net/201409448.html Less的好处不用说大家都知道,确实让写CSS的人不在痛苦了,最近我在Less里加入calc时确发现了有点 ...
- Animation组件
[Animation组件] Animation是Unity3D中老的动画组件,从4.x起已全面被MecAnim中的Animator组建所替代.但是4.x仍保留了Animation组件,所以了解此组件还 ...