上海网站建站模板,杭州最好的电商培训机构,网站利用百度离线地图,wordpress 好玩的插件Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想#xff1a;在匹配过程中#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较#xff0c;它在发现不匹配时#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配在匹配过程中模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较它在发现不匹配时算法能跳过尽可能多的字符以进行下一步的匹配从而提高了匹配效率。
Sunday算法思想跟BMBoyer Moore算法很相似在匹配失败时关注的是文本串中参加匹配的最末位字符的下一位字符。如果该字符没有在匹配串中出现则直接跳过即移动步长匹配串长度1否则同BM算法一样其移动步长匹配串中最右端的该字符到末尾的距离1。
本代码运行效果 源代码
using System; using System.Text; using System.Collections; using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm { public static partial class PatternSearch { /// summary /// 字符位置表 /// /summary private static int ALPHA_BET 512; /// summary /// 计算字符的出现位置表 /// /summary /// param namepattern/param /// returns/returns private static int[] ComputeOccurence(string pattern) { int[] table new int[ALPHA_BET]; for (char a (char)0; a (char)ALPHA_BET; a) { table[(int)a] -1; } for (int i 0; i pattern.Length; i) { char a pattern[i]; table[(int)a] i; } return table; } /// summary /// 字符串匹配算法模式搜索Sunday算法 /// /summary /// param nametext/param /// param namepattern/param /// returns/returns public static Listint Sunday_Search(string text, string pattern) { Listint matchs new Listint(); int i 0; int[] table ComputeOccurence(pattern); while (i text.Length - pattern.Length) { int j 0; while (j pattern.Length text[i j] pattern[j]) { j; } if (j pattern.Length) { matchs.Add(i); } i pattern.Length; if (i text.Length) { i - table[(int)text[i]]; } } return matchs; } } } ——————————————————————
POWER BY 315SOFT.COM TRUFFER.CN
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class PatternSearch{/// summary/// 字符位置表/// /summaryprivate static int ALPHA_BET 512;/// summary/// 计算字符的出现位置表/// /summary/// param namepattern/param/// returns/returnsprivate static int[] ComputeOccurence(string pattern){int[] table new int[ALPHA_BET];for (char a (char)0; a (char)ALPHA_BET; a){table[(int)a] -1;}for (int i 0; i pattern.Length; i){char a pattern[i];table[(int)a] i;}return table;}/// summary/// 字符串匹配算法模式搜索Sunday算法/// /summary/// param nametext/param/// param namepattern/param/// returns/returnspublic static Listint Sunday_Search(string text, string pattern){Listint matchs new Listint();int i 0;int[] table ComputeOccurence(pattern);while (i text.Length - pattern.Length){int j 0;while (j pattern.Length text[i j] pattern[j]){j;}if (j pattern.Length){matchs.Add(i);}i pattern.Length;if (i text.Length){i - table[(int)text[i]];}}return matchs;}}
}