一.查找的算法


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. PHP5.3.8连接Sql Server SQLSRV30

    PHP5.3连接SQL Server就不能用php_mssql.dll了. 网上下载了好多都不行,因为它的版本是5.2的,不能再PHP5.3中使用. 后来听说微软专门为PHP出了自己的dll. 叫做M ...

  2. Excel开发学习笔记:根据工作表worksheet内容控制按钮的状态

    开发环境基于VSTO,具体配置:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序. 在Ribbon工具栏中有2个功能按钮,它们是否可用取决于workshe ...

  3. C#三层架构详细解剖

    深入浅出C#三层架构(转) 本文用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用.写本文的目的,不是为了说明自己的这个方法有多对,而是希望给那些初学三层架构却不知从何入 ...

  4. MyBatis多表映射demo

    三个实体类,作者.文章和评论. public class Author { private int id; private String username; private String nickna ...

  5. 关于XSS漏洞的简介以及分类

    不得不说注入的时代已经过去了,最近xss貌似比较热门.我就去恶补了一下,我表示我只是菜鸟,对xss不了解.所以从最基本的学起. 什么xss漏洞? 一.XSS攻击简介 作为一种HTML注入攻击,XSS攻 ...

  6. Hadoop的HA机制

    前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不中断服务) 实现高可用最关 ...

  7. Emgu学习之(一)----Emgu简介

    OpenCV OpenCV是一个开源的跨平台的计算机视觉库,它的设计目标时执行速度尽量快,主要关注实时应用.可以运行在Linux.Windows.Mac OS.Android.IOS.Maemo.Fr ...

  8. Android Architecture Components

    https://developer.android.com/topic/libraries/architecture/index.html ViewModel 有LiveData Activity 监 ...

  9. PHP Curl请求Https接口

    在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...

  10. 2-JRE System Libraty [eclipse-mars](unbound)