国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#,字符串匹配(模式搜索)Sunday算法的源代碼

這篇具有很好參考價(jià)值的文章主要介紹了C#,字符串匹配(模式搜索)Sunday算法的源代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

sunday算法 c#,C#算法演義 Algorithm Recipes,c#,算法,字符串查找算法,Sunday

Sunday算法是Daniel M.Sunday于1990年提出的一種字符串模式匹配算法。

核心思想:在匹配過程中,模式串并不被要求一定要按從左向右進(jìn)行比較還是從右向左進(jìn)行比較,它在發(fā)現(xiàn)不匹配時,算法能跳過盡可能多的字符以進(jìn)行下一步的匹配,從而提高了匹配效率。

Sunday算法思想跟BM(Boyer Moore)算法很相似,在匹配失敗時關(guān)注的是文本串中參加匹配的最末位字符的下一位字符。如果該字符沒有在匹配串中出現(xiàn)則直接跳過,即:移動步長=匹配串長度+1;否則,同BM算法一樣,其移動步長=匹配串中最右端的該字符到末尾的距離+1
?

本代碼運(yùn)行效果:

sunday算法 c#,C#算法演義 Algorithm Recipes,c#,算法,字符串查找算法,Sunday

源代碼:

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>
?? ??? ?/// 計(jì)算字符的出現(xiàn)位置表
?? ??? ?/// </summary>
?? ??? ?/// <param name="pattern"></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 name="text"></param>
?? ??? ?/// <param name="pattern"></param>
?? ??? ?/// <returns></returns>
?? ??? ?public static List<int> Sunday_Search(string text, string pattern)
?? ??? ?{
?? ??? ??? ?List<int> matchs = new List<int>();

?? ??? ??? ?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文章來源地址http://www.zghlxwxcb.cn/news/detail-819288.html

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>
?? ??? ?/// 計(jì)算字符的出現(xiàn)位置表
?? ??? ?/// </summary>
?? ??? ?/// <param name="pattern"></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 name="text"></param>
?? ??? ?/// <param name="pattern"></param>
?? ??? ?/// <returns></returns>
?? ??? ?public static List<int> Sunday_Search(string text, string pattern)
?? ??? ?{
?? ??? ??? ?List<int> matchs = new List<int>();

?? ??? ??? ?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;
?? ??? ?}
?? ?}
}

到了這里,關(guān)于C#,字符串匹配(模式搜索)Sunday算法的源代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)課設(shè):基于字符串模式匹配算法的病毒感染檢測問題

    數(shù)據(jù)結(jié)構(gòu)課設(shè):基于字符串模式匹配算法的病毒感染檢測問題

    1.掌握字符串的順序存儲表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的實(shí)現(xiàn)。 問題描述 醫(yī)學(xué)研究者最近發(fā)現(xiàn)了某些新病毒,通過對這些病毒的分析,得知它們的DNA序列都是環(huán)狀的。現(xiàn)在研究者已收集了大量的病毒DNA和人的DNA數(shù)據(jù),想快速檢測出這些人是否感染了

    2023年04月27日
    瀏覽(28)
  • 【字符串匹配】暴力匹配算法

    【字符串匹配】暴力匹配算法

    ? 暴力匹配算法,也稱為樸素字符串匹配算法,是一種簡單但不高效的字符串匹配方法。它的原理非常直觀,其主要思想是逐個字符地比較文本串和模式串,從文本串的每個可能的起始位置開始,依次檢查是否有匹配的子串。以下是暴力匹配算法的詳細(xì)原理: 1. 一個字一個

    2024年02月09日
    瀏覽(29)
  • 字符串查找匹配算法

    字符串查找匹配算法

    字符串匹配(查找)是字符串的一種基本操作:給定帶匹配查詢的文本串S和目標(biāo)子串T,T也叫做模式串。在文本S中找到一個和模式T相符的子字符串,并返回該子字符串在文本中的位置。 Brute Force Algorithm,也叫樸素字符串匹配算法,Naive String Matching Algorithm。 基本思路就是將

    2024年02月14日
    瀏覽(28)
  • PTA 7-1 字符串模式匹配(KMP)

    給定一個字符串 text 和一個模式串 pattern,求 pattern 在text 中的出現(xiàn)次數(shù)。text 和 pattern 中的字符均為英語大寫字母或小寫字母。text中不同位置出現(xiàn)的pattern 可重疊。 輸入格式: 輸入共兩行,分別是字符串text 和模式串pattern。 輸出格式: 輸出一個整數(shù),表示 pattern 在 text 中的出

    2024年02月06日
    瀏覽(28)
  • 字符串匹配-KMP算法

    字符串匹配-KMP算法

    KMP算法,字符串匹配算法,給定一個主串S,和一個字串T,返回字串T與之S匹配的數(shù)組下標(biāo)。 在學(xué)KMP算法之前,對于兩個字符串,主串S,和字串T,我們根據(jù)暴力匹配,定義兩個指針,i指向主串S的起始,j指向字串T的起始,依次比較,如果 主串i位置的值等于子串j位置的值,

    2024年02月14日
    瀏覽(28)
  • 字符串匹配算法:KMP

    字符串匹配算法:KMP

    Knuth–Morris–Pratt(KMP)是由三位數(shù)學(xué)家克努斯、莫里斯、普拉特同時發(fā)現(xiàn),所有人們用三個人的名字來稱呼這種算法,KMP是一種改進(jìn)的字符串匹配算法,它的核心是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達(dá)到快速匹配的目的。它的時間復(fù)雜度是 O(m+n) 字

    2024年02月06日
    瀏覽(25)
  • 【kmp算法】字符串匹配

    kmp算法解決的是字符串匹配的問題,具體來說假定我們要在主串s[ ] 中匹配模式串p[ ],找到匹配到的位置loc; 最自然的想法是暴力寫法 (BF)枚舉主串字符s[ i ] ,和模式串p[ j ]。一個一個匹配,如果匹配失敗,i指針回退回起點(diǎn),往前進(jìn)一位,再次進(jìn)行比較,知道匹配成功。

    2024年02月04日
    瀏覽(31)
  • 【藍(lán)橋杯算法題】字符串匹配算法

    這段代碼實(shí)現(xiàn)了一個過濾字符串中非字母字符的功能,并統(tǒng)計(jì)字母個數(shù)。 首先,在主函數(shù)中,定義一個長度為100的字符數(shù)組str,用fgets函數(shù)從標(biāo)準(zhǔn)輸入獲取用戶輸入的字符串。 然后調(diào)用filterLetters函數(shù),利用指針p1和p2遍歷字符串中的每個字符,判斷是否為字母字符, 若是,則

    2024年02月08日
    瀏覽(25)
  • 一些常見的字符串匹配算法

    作者:京東零售?李文濤 字符串匹配在文本處理的廣泛領(lǐng)域中是一個非常重要的主題。字符串匹配包括在文本中找到一個,或者更一般地說,所有字符串(通常來講稱其為模式)的出現(xiàn)。該模式表示為p=p[0..m-1];它的長度等于m。文本表示為t=t[0..n-1],它的長度等于n。兩個字符串都建

    2023年04月25日
    瀏覽(29)
  • 字符串匹配算法(BF&&KMP)

    字符串匹配算法(BF&&KMP)

    個人主頁:平行線也會相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實(shí)現(xiàn))】 在學(xué)習(xí)這個算法之前,我們先來看看什么時字符串匹配算法,簡單來說 有一個主串和一個子串,查找子串在主串的位置,然后返回這個位置

    2023年04月17日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包