Wu-Manber演算法簡介及Python實作說明
Wu-Manber演算法是一種字串匹配演算法,用於高效地搜尋字串。它是一種混合演算法,結合了Boyer-Moore和Knuth-Morris-Pratt演算法的優勢,可提供快速且準確的模式匹配。
Wu-Manber演算法步驟
#1.建立一個雜湊表,將模式的每個可能子字串對應到該子字串出現的模式位置。
2.此雜湊表用於快速識別文字中模式的潛在起始位置。
3.遍歷文字並將每個字元與模式中的對應字元進行比較。
4.如果字元匹配,則可以移動到下一個字元並繼續比較。
5.如果字元不匹配,可以使用雜湊表來確定在模式的下一個潛在起始位置之前可以跳過的最大字元數。
6.這允許演算法快速跳過大部分文本,而不會錯過任何潛在的匹配。
Python實作Wu-Manber演算法
# Define the hash_pattern() function to generate # a hash for each subpattern def hashPattern(pattern, i, j): h = 0 for k in range(i, j): h = h * 256 + ord(pattern[k]) return h # Define the Wu Manber algorithm def wuManber(text, pattern): # Define the length of the pattern and # text m = len(pattern) n = len(text) # Define the number of subpatterns to use s = 2 # Define the length of each subpattern t = m // s # Initialize the hash values for each # subpattern h = [0] * s for i in range(s): h[i] = hashPattern(pattern, i * t, (i + 1) * t) # Initialize the shift value for each # subpattern shift = [0] * s for i in range(s): shift[i] = t * (s - i - 1) # Initialize the match value match = False # Iterate through the text for i in range(n - m + 1): # Check if the subpatterns match for j in range(s): if hashPattern(text, i + j * t, i + (j + 1) * t) != h[j]: break else: # If the subpatterns match, check if # the full pattern matches if text[i:i + m] == pattern: print("Match found at index", i) match = True # Shift the pattern by the appropriate # amount for j in range(s): if i + shift[j] < n - m + 1: break else: i += shift[j] # If no match was found, print a message if not match: print("No match found") # Driver Code text = "the cat sat on the mat" pattern = "the" # Function call wuManber(text, pattern)
KMP和Wu-Manber演算法之間的差異
#KMP演算法和Wu Manber演算法都是字串比對演算法,也就是說它們都是用來在一個較大的字串中尋找一個子字串。這兩種演算法具有相同的時間複雜度,這意味著它們在演算法運行所需的時間方面具有相同的效能特徵。
但是,它們之間存在一些差異:
#1、KMP演算法使用預處理步驟產生部分匹配表,用於加快字符串匹配過程。這使得當搜尋的模式相對較長時,KMP演算法比Wu Manber演算法更有效。
2、Wu Manber演算法使用不同的方法來進行字串匹配,它將模式劃分為多個子模式,並使用這些子模式在文本中搜尋匹配項。這使得Wu Manber演算法在搜尋的模式相對較短時比KMP演算法更有效。
#以上是Wu-Manber演算法簡介及Python實作說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

灰狼最佳化演算法(GWO)是一種基於族群的元啟發式演算法,模擬自然界中灰狼的領導層級與狩獵機制。灰狼算法靈感1、灰狼被認為是頂級掠食者,處於食物鏈的頂端。 2.灰狼喜歡群居(群居),每個狼群平均有5-12隻狼。 3.灰狼具有非常嚴格的社會支配等級,如下圖:Alpha狼:Alpha狼在整個灰狼群中佔據優勢地位,擁有統領整個灰狼群的權利。在演算法應用中,Alpha狼是最佳解決方案之一,由最佳化演算法產生的最優解。 Beta狼:Beta狼定期向Alpha狼報告,並幫助Alpha狼做出最佳決策。在演算法應用中,Beta狼可

嵌套採樣演算法是一種高效的貝葉斯統計推斷演算法,用於計算複雜機率分佈下的積分或總和。它透過將參數空間分解為多個體積相等的超立方體,並逐步迭代地將其中一個最小體積的超立方體“推出”,然後用隨機樣本填充該超立方體,以更好地估計機率分佈的積分值。透過不斷迭代,嵌套採樣演算法可以得到高精度的積分值和參數空間的邊界,從而可應用於模型比較、參數估計和模型選擇等統計問題。這個演算法的核心思想是將複雜的積分問題轉化為一系列簡單的積分問題,透過逐步縮小參數空間的體積,逼近真實的積分值。每個迭代步驟都透過隨機採樣從參數空間

麻雀搜尋演算法(SSA)是基於麻雀反捕食和覓食行為的元啟發式最佳化演算法。麻雀的覓食行為可分為兩種主要類型:生產者和拾荒者。生產者主動尋找食物,而拾荒者則爭奪生產者的食物。麻雀搜尋演算法(SSA)原理在麻雀搜尋演算法(SSA)中,每隻麻雀都密切關注著鄰居的行為。透過採用不同的覓食策略,個體能夠有效地利用保留的能量來追求更多的食物。此外,鳥類在搜尋空間中更容易受到捕食者的攻擊,因此它們需要尋找更安全的位置。群體中心的鳥類可以透過靠近鄰居來最大限度地減少自身的危險範圍。當一隻鳥發現掠食者時,會發出警報聲,以便

貝爾曼福特演算法(BellmanFord)可以找到從目標節點到加權圖其他節點的最短路徑。這點和Dijkstra演算法很相似,貝爾曼福特演算法可以處理負權重的圖,從實作來看也相對簡單。貝爾曼福特演算法原理詳解貝爾曼福特演算法透過高估從起始頂點到所有其他頂點的路徑長度,迭代尋找比高估路徑更短的新路徑。因為我們要記錄每個節點的路徑距離,可以儲存在大小為n的陣列中,n也代表了節點的數量。實例圖1、選擇起始節點,並無限指定給其他所有頂點,記錄路徑值。 2、訪問每條邊,並進行鬆弛操作,不斷更新最短路徑。 3、我們需

Wu-Manber演算法是一種字串匹配演算法,用於高效地搜尋字串。它是一種混合演算法,結合了Boyer-Moore和Knuth-Morris-Pratt演算法的優勢,可提供快速且準確的模式匹配。 Wu-Manber演算法步驟1.建立一個雜湊表,將模式的每個可能子字串映射到該子字串出現的模式位置。 2.此雜湊表用於快速識別文字中模式的潛在起始位置。 3.遍歷文字並將每個字元與模式中對應的字元進行比較。 4.如果字元匹配,則可以移動到下一個字元並繼續比較。 5.如果字元不匹配,可以使用哈希表來確定在模式的下一個潛

鯨魚最佳化演算法(WOA)是一種基於自然啟發的元啟發式最佳化演算法,模擬了座頭鯨的狩獵行為,用於數值問題的最佳化。鯨魚優化演算法(WOA)以一組隨機解作為起點,透過每次迭代中搜尋代理的位置更新,根據隨機選擇的搜尋代理或迄今為止的最佳解決方案來進行最佳化。鯨魚優化演算法靈感鯨魚最佳化演算法的靈感源自於座頭鯨的狩獵行為。座頭鯨喜歡的食物位於海面附近,如磷蝦和魚群。因此,座頭鯨在狩獵時透過自下而上螺旋吐泡泡的方式,將食物聚集在一起形成泡泡網。在「向上螺旋」機動中,座頭鯨下潛約12m,然後開始在獵物周圍形成螺旋狀氣泡並向上游

ID3演算法是決策樹學習中的基本演算法之一。它透過計算每個特徵的資訊增益來選擇最佳的分裂點,以產生一棵決策樹。資訊增益是ID3演算法中的重要概念,用來衡量特徵對分類任務的貢獻。本文將詳細介紹資訊增益的概念、計算方法以及在ID3演算法中的應用。一、資訊熵的概念資訊熵是資訊理論中的概念,衡量隨機變數的不確定性。對於離散型隨機變數X,其資訊熵定義如下:H(X)=-\sum_{i=1}^{n}p(x_i)log_2p(x_i)其中,n代表隨機變數X可能的取值個數,而p(x_i)表示隨機變數X取值為x_i的機率。信

尺度不變特徵變換(SIFT)演算法是一種用於影像處理和電腦視覺領域的特徵提取演算法。該演算法於1999年提出,旨在提高電腦視覺系統中的物體辨識和匹配性能。 SIFT演算法具有穩健性和準確性,被廣泛應用於影像辨識、三維重建、目標偵測、視訊追蹤等領域。它透過在多個尺度空間中檢測關鍵點,並提取關鍵點周圍的局部特徵描述符來實現尺度不變性。 SIFT演算法的主要步驟包括尺度空間的建構、關鍵點偵測、關鍵點定位、方向分配和特徵描述子產生。透過這些步驟,SIFT演算法能夠提取出具有穩健性和獨特性的特徵,從而實現對影像的高效
