一.查找的算法


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]查找的更多相关文章

  1. Sunday算法(字符串查找、匹配)

    字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上,KMP算法并不比最简单的 ...

  2. 文本比较算法三——SUNDAY 算法

    SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...

  3. 字符串匹配的sunday算法

    sunday算法核心思想:启发式移动搜索步长! SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).这里介 ...

  4. Sunday字符串匹配算法

    逛ACM神犇的博客的时候看到的这个神奇的算法 KMP吧,失配函数难理解,代码量长 BF吧,慢,很慢,特别慢. BM吧,我不会写... 现在看到了Sunday算法呀,眼前一亮,神清气爽啊. 字符串匹配算 ...

  5. [Data Structure & Algorithm] 七大查找算法

    查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...

  6. STL中algorithm里的查找

    首先,选择查找算法时,区间是否排序是一个至关重要的因素.可以按是否需要排序区间分为两组: A. count,find B. binary_search,lower_bound,upper_bound, ...

  7. 【algorithm】 二分查找算法

    二分查找算法:<维基百科> 在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)[1].对数搜索(英语:logari ...

  8. 【Algorithm】二分查找

    今天在学习<编程之美>的时候,看到一个二分查找的题目,发现原来我真的不懂二分查找. 二分查找时候注意的事项: 在求二分查找的中间点时没有使用 midIndex = (minIndex + ...

  9. 《算法C语言实现》————快速-查找算法(quick-find algorithm)

    算法基础是一个整型数组,当且仅当第p个元素和第q个元素相等时,p和q时连通的.初始时,数组中的第i个元素的值为i,0<=i<N,为实现p与q的合并操作,我们遍历数组,把所有名为p的元素值改 ...

随机推荐

  1. Linux学习笔记 - 入门

    简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSI ...

  2. 恒创科技 基于openStack云主机

    https://www.henghost.com/cloud-vps.shtml?s=gg&gclid=CKaXuOyr79UCFY-TvQodMJ8BCw

  3. leetcode728

    vector<int> selfDividingNumbers(int left, int right) { vector<int> V; for (int i = left; ...

  4. KinderEditor编辑器 在Asp.Net中的使用

    KinderEditor编辑器的使用 分为简单的三步. 1:添加引用部分 <script src="/KinderEditor/kindeditor-min.js">& ...

  5. CSS秘密花园:多边框

    今天在查询CSS3动画相关资料时偶然发现这个,感觉有时还是挺方便的.原文链接:http://www.w3cplus.com/css3/css-secrets/multiple-borders.html ...

  6. Theos简介

    [Theos简介] Theos is a cross-platform suite of development tools for managing, developing, and deployi ...

  7. HashMap和HashSet的相同点和不同点

    Map集合,就是有一对属性值的集合,属性包含key,和value.关键字key是唯一不重复的.Map是一个有序的集合,所以查询起来速度很快.而HashSet就像是把HashMap中value去掉,说白 ...

  8. lunix tomcat重启脚步

    [wlcf@iZbp12oby5qekkz14dlokeZ ~]$ cat restart_tomcat #!/bin/shif [ $# != 1 ] ; then echo "USAGE ...

  9. opennebula模板对照比较

    良好模板 有问题模板

  10. c语言实践:求两个数的最大公约数

    我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...