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

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

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

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

?M.O.Rabin

Rabin-Karp算法,是由M.O.Rabin和R.A.Karp設(shè)計(jì)實(shí)現(xiàn)的一種基于移動(dòng)散列值的字符串匹配算法。

通常基于散列值的字符串匹配方法:(1)首先計(jì)算模式字符串的散列函數(shù);(2)然后利用相同的散列函數(shù)計(jì)算文本中所有可能的M個(gè)字符的子字符串的散列函數(shù)值并尋找匹配。但是這種方法比暴力查找還慢,因?yàn)橛?jì)算散列值會(huì)涉及字符串中的每個(gè)字符。Rabin和Karp對(duì)上述方法進(jìn)行了改進(jìn),設(shè)計(jì)實(shí)現(xiàn)了一種能夠在常數(shù)時(shí)間內(nèi)算出M個(gè)字符的子字符串散列值的方法。

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

運(yùn)行效果:

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

源代碼:

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
?? ?public static partial class PatternSearch
?? ?{
?? ??? ?public readonly static int ALPHA_CODE_MAX = 256;

?? ??? ?/// <summary>
?? ??? ?/// 字符串匹配算法(模式搜索)Rabin Karp 算法
?? ??? ?/// </summary>
?? ??? ?/// <param name="text"></param>
?? ??? ?/// <param name="pattern"></param>
?? ??? ?/// <param name="primeNumber"></param>
?? ??? ?/// <returns></returns>
?? ??? ?public static List<int> Rabin_Karp_Search( string text,string pattern, int primeNumber = 101)
?? ??? ?{
?? ??? ??? ?List<int> matchs = new List<int>();

?? ??? ??? ?int M = pattern.Length;
?? ??? ??? ?int N = text.Length;

?? ??? ??? ?int h = 1;
?? ??? ??? ?for (int i = 0; i < M - 1; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?h = (h * ALPHA_CODE_MAX) % primeNumber;
?? ??? ??? ?}

?? ??? ??? ?int p = 0;
?? ??? ??? ?int t = 0;
?? ??? ??? ?for (int i = 0; i < M; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?p = (ALPHA_CODE_MAX * p + pattern[i]) % primeNumber;
?? ??? ??? ??? ?t = (ALPHA_CODE_MAX * t + text[i]) % primeNumber;
?? ??? ??? ?}

?? ??? ??? ?for (int i = 0; i <= N - M; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?if (p == t)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?int j;
?? ??? ??? ??? ??? ?for (j = 0; j < M; j++)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?if (text[i + j] != pattern[j])
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?if (j == M)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?matchs.Add(i);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}

?? ??? ??? ??? ?if (i < (N - M))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?t = (ALPHA_CODE_MAX * (t - text[i] * h) + text[i + M]) % primeNumber;
?? ??? ??? ??? ??? ?if (t < 0)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?t = (t + primeNumber);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}

?? ??? ??? ?return matchs;
?? ??? ?}
?? ?}
}
?

----------------------------------------------------------------

POWER BY TRUFFER.CN文章來源地址http://www.zghlxwxcb.cn/news/detail-803868.html

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
?? ?public static partial class PatternSearch
?? ?{
?? ??? ?public readonly static int ALPHA_CODE_MAX = 256;

?? ??? ?/// <summary>
?? ??? ?/// 字符串匹配算法(模式搜索)Rabin Karp 算法
?? ??? ?/// </summary>
?? ??? ?/// <param name="text"></param>
?? ??? ?/// <param name="pattern"></param>
?? ??? ?/// <param name="primeNumber"></param>
?? ??? ?/// <returns></returns>
?? ??? ?public static List<int> Rabin_Karp_Search( string text,string pattern, int primeNumber = 101)
?? ??? ?{
?? ??? ??? ?List<int> matchs = new List<int>();

?? ??? ??? ?int M = pattern.Length;
?? ??? ??? ?int N = text.Length;

?? ??? ??? ?int h = 1;
?? ??? ??? ?for (int i = 0; i < M - 1; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?h = (h * ALPHA_CODE_MAX) % primeNumber;
?? ??? ??? ?}

?? ??? ??? ?int p = 0;
?? ??? ??? ?int t = 0;
?? ??? ??? ?for (int i = 0; i < M; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?p = (ALPHA_CODE_MAX * p + pattern[i]) % primeNumber;
?? ??? ??? ??? ?t = (ALPHA_CODE_MAX * t + text[i]) % primeNumber;
?? ??? ??? ?}

?? ??? ??? ?for (int i = 0; i <= N - M; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?if (p == t)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?int j;
?? ??? ??? ??? ??? ?for (j = 0; j < M; j++)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?if (text[i + j] != pattern[j])
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?if (j == M)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?matchs.Add(i);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}

?? ??? ??? ??? ?if (i < (N - M))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?t = (ALPHA_CODE_MAX * (t - text[i] * h) + text[i + M]) % primeNumber;
?? ??? ??? ??? ??? ?if (t < 0)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?t = (t + primeNumber);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}

?? ??? ??? ?return matchs;
?? ??? ?}
?? ?}
}

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

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

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

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】數(shù)組和字符串(十四):字符串匹配1:樸素的模式匹配算法(StringMatching)

    【數(shù)據(jù)結(jié)構(gòu)】數(shù)組和字符串(十四):字符串匹配1:樸素的模式匹配算法(StringMatching)

    ??字符串(String)是由零個(gè)或多個(gè)字符(char)順序排列組成的有限序列,簡稱為串。例如 “good morning”就是由12個(gè)字符構(gòu)成的一個(gè)字符串。一般把字符串記作: S = ′ ′ a 0 a 1 … a n ? 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ? a 1 ? … a n ? 1 ′′ ? ??其中S是串名,引號(hào)中

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

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

    2024年02月06日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)課設(shè):基于字符串模式匹配算法的病毒感染檢測(cè)問題

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

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

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

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

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

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

    字符串查找匹配算法

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

    2024年02月14日
    瀏覽(28)
  • python字符串模糊匹配,并計(jì)算匹配分?jǐn)?shù)

    python字符串模糊匹配,并計(jì)算匹配分?jǐn)?shù)

    thefuzz包以前叫fuzzywuzzy,0.19版本開始改名為thefuzz,github地址: GitHub - seatgeek/thefuzz: Fuzzy String Matching in Python 可以通過命令pip install thefuzz安裝此包。用法還是比較簡單的: 上面兩個(gè)字符串的相似度為89%。 我們先看看這個(gè)包下面的源碼,來查看thefuzz是怎么實(shí)現(xiàn)模糊匹配的。the

    2023年04月23日
    瀏覽(103)
  • 字符串匹配-KMP算法

    字符串匹配-KMP算法

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

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

    字符串匹配算法:KMP

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

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

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

    2024年02月04日
    瀏覽(31)
  • 動(dòng)態(tài)規(guī)劃--通配字符串匹配

    1. 題目來源 鏈接:通配符匹配 來源:LeetCode 2. 題目說明 給定一個(gè)字符串 (s) 和一個(gè)字符模式 § ,實(shí)現(xiàn)一個(gè)支持 ‘?’ 和 ‘*’ 的通配符匹配。 ‘?’ 可以匹配任何單個(gè)字符。 ‘*’ 可以匹配任意字符串(包括空字符串)。 兩個(gè)字符串完全匹配才算匹配成功。 說明: s 可能為

    2024年02月14日
    瀏覽(36)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包