找到 1861 篇文章 相關資料結構

所有後綴的 Trie 樹

karthikeya Boyini
更新於 2020年6月15日 19:10:41

427 次檢視

從文字中,我們可以生成所有後綴以構建樹結構。我們知道文字中出現的每個模式都必須是文字中某個可能字尾的字首。透過構建所有後綴的 Trie 樹,我們可以線上性時間內找到任何子字串。每個字尾都以字串終止符號結尾。如果從每個節點存在任何路徑,則它向前移動,否則返回未找到該模式。對於此演算法,時間複雜度為 O(m+k),其中 m 是字串的長度,k 是模式出現的頻率... 閱讀更多

字尾陣列

Sharon Christine
更新於 2020年6月15日 19:15:53

884 次檢視

從給定的字串中,我們可以獲得所有可能的字尾。在按字典順序對字尾進行排序後,我們可以得到字尾陣列。字尾陣列也可以使用字尾樹來形成。透過使用字尾樹的 DFS 遍歷,我們可以得到字尾陣列。字尾陣列有助於線上性時間內查詢字尾。我們還可以使用類似二分查詢的過程,使用字尾陣列查詢子字串。時間複雜度為 O(m log n)輸入和輸出輸入:主字串:“BANANA”,模式:“NAN”輸出:模式在位置 2 處找到演算法fillSuffixArray (text, suffArray)輸入:主字串輸出:字尾陣列開始  n := text Length ... 閱讀更多

Rabin-Karp 演算法

karthikeya Boyini
更新於 2020年6月15日 19:24:52

2K+ 次檢視

Rabin-Karp 是另一種模式搜尋演算法,用於以更有效的方式查詢模式。它也透過逐個移動視窗來檢查模式,但在並非所有情況下都檢查所有字元,它會找到雜湊值。當雜湊值匹配時,它才會嘗試檢查每個字元。此過程使演算法更高效。時間複雜度為 O(m+n),但對於最壞情況,它是 O(mn)。輸入和輸出輸入:主字串:“ABAAABCDBBABCDDEBCABC”,模式“ABC”輸出:模式在位置 4 處找到 模式在位置 10 處找到 模式在位置 18 處找到演算法rabinKarpSearch(text, pattern, prime)輸入 - 主... 閱讀更多

樸素模式搜尋

Sharon Christine
更新於 2020年6月15日 18:34:58

6K+ 次檢視

樸素模式搜尋是在其他模式搜尋演算法中最簡單的方法。它檢查主字串的所有字元與模式是否匹配。此演算法適用於較小的文字。它不需要任何預處理階段。我們可以透過檢查一次字串來找到子字串。它也不佔用額外的空間來執行操作。樸素模式搜尋方法的時間複雜度為 O(m*n)。m 是模式的大小,n 是主字串的大小。輸入和輸出輸入:主字串:“ABAAABCDBBABCDDEBCABC”,模式:“ABC”輸出:模式在位置 4 處找到 模式在... 閱讀更多

Manacher 演算法

karthikeya Boyini
更新於 2020年6月15日 18:40:57

718 次檢視

要從字串中找到最長的迴文子字串,我們可以使用 Manacher 演算法。透過選擇每個字元,我們將嘗試使用左右指標查詢是否存在任何迴文。還有一個數組用於儲存資訊,從這些資訊中我們可以很容易地找到迴文有多長。對於每個字元,陣列將儲存資訊。遍歷整個字串後,我們可以從建立的陣列中找到最長的迴文子序列。此演算法的時間複雜度為 O(n)。輸入和輸出輸入:字串:“levelup”輸出:最長迴文是:level演算法longestPalindrome(text)輸入 - 要查詢最長迴文的文字輸出 - ... 閱讀更多

Kasai 演算法

karthikeya Boyini
更新於 2020年6月15日 19:00:01

689 次檢視

Kasai 演算法用於從字尾陣列中獲取最長公共字首 (LCP) 陣列。首先找到字尾陣列。之後,Kasai 演算法獲取字尾陣列列表以查詢 LCP。對於 LCP 陣列,它需要 O(m log n),其中 m 是模式長度,n 是文字的長度。Kasai 演算法需要 O(n) 來在主字串中搜索模式。輸入和輸出輸入:主字串:“banana”輸出:字尾陣列:5 3 1 0 4 2 公共字首陣列:1 3 0 0 2 0演算法buildSuffixArray(text)輸入:主字串輸出:構建的字尾陣列... 閱讀更多

有限自動機的有效構建

Sharon Christine
更新於 2020年6月15日 17:31:15

1K+ 次檢視

透過構建有限自動機,我們可以簡單地在文字中執行模式搜尋。首先,我們必須填充一個二維陣列以建立有限自動機的轉換表。建立表後,搜尋過程很簡單。從自動機的第一個狀態開始,當我們到達最終狀態時,表示在字串中找到了模式。對於有限自動機的構建,時間複雜度為 O(M*K),M 是模式長度,K 是不同字元的數量。主模式搜尋的複雜度為 O(n)。輸入和輸出輸入:主字串:... 閱讀更多

壞字元啟發式

Sharon Christine
更新於 2020年6月15日 17:45:08

1K+ 次檢視

壞字元啟發式方法是 Boyer Moore 演算法的一種方法。另一種方法是好字尾啟發式。在這種方法中,我們將嘗試找到一個壞字元,即主字串中的一個字元,它與模式不匹配。當發生不匹配時,我們將移動整個模式,直到不匹配變成匹配,否則,模式將移過壞字元。此處,時間複雜度對於最佳情況為 O(m/n),對於最壞情況為 O(mn),其中 n 是文字的長度,m 是模式的長度。輸入和... 閱讀更多

字謎模式搜尋

karthikeya Boyini
更新於 2020年6月15日 17:47:44

424 次檢視

字謎基本上是給定字串或模式的所有排列。這種模式搜尋演算法略有不同。在這種情況下,不僅搜尋確切的模式,還搜尋文字中給定模式的所有可能排列。為了解決這個問題,我們將整個文字劃分為幾個與模式長度相同的視窗。然後計算每個模式字元是否被找到並存儲在陣列中。對於每個視窗,我們還嘗試找到計數陣列,然後檢查它們是否匹配。字謎模式搜尋演算法的時間複雜度為 O(n)。輸入... 閱讀更多

Aho-Corasick 演算法

Sharon Christine
更新於 2020年6月15日 16:35:18

1K+ 次檢視

此演算法有助於查詢所有給定關鍵字集的所有出現。它是一種字典匹配演算法。它使用一棵樹結構使用所有關鍵字。構建樹後,它會嘗試將樹轉換為自動機,以便線上性時間內進行搜尋。Aho-Corasick 演算法有三個不同的階段。這些是 Go-to、Failure 和 Output。在 Go-to 階段,它使用所有關鍵字構建樹。在下一階段或 Failure 階段,它會嘗試找到向後轉換以獲取某些關鍵字的適當字尾。在... 閱讀更多

廣告

© . All rights reserved.