[英]Exact number of character comparisons in naive exact algorithm
給定一個子字符串和一個字符串,運行幼稚的精確算法以將該子字符串與給定字符串進行匹配時,是否可以計算出進行字符比較的確切次數? 假設完全匹配,沒有近似匹配。
根據許多資料(例如, http : //www.di.unipi.it/~pisanti/DIDATTICA/patternmatching1.pdf ),可以使用Big-Oh表示法來計算比較的最壞情況: O(nm)
。 即,最壞的情況是: n(m-n+1)
,其中n
是要與字符串m
匹配的子字符串的m
。
但是,以下消息來源指出,在朴素的精確算法中大約進行了m
比較: http : //www.cs.cornell.edu/courses/cs312/2002sp/lectures/lec25.htm 。 請注意,它們在符號中使用n
而不是m
,但是我們的意思都是相同的(我只是與先前的URL鏈接保持一致)。
無論如何,這讓我想知道在運行朴素精確算法時是否可以精確計算出多少個字符比較。 如果我們可以知道最壞的情況,並且可以大致猜到大概進行了多少個字符比較,那么肯定有一種方法可以准確地計算出進行多少個字符比較。
假設搜索是在字符串長度的外循環和子字符串長度的內循環下執行的,則將執行
如果搜索在第I
位置成功,則精確進行NI
比較( 1≤I≤M-N+1
);
如果搜索失敗,則精確地進行ΣJk
比較,其中Jk
是子字符串前綴中匹配字符的數量加上一個( 1≤Jk≤N
)。
如上所述,當進行所有可能的比較時,最壞的情況是N(M-N+1)
。 最好的情況是,當子字符串位於第一個位置時, N
的最小值;當所有子字符串比較立即失敗時, M-N+1
的最小值。
假設失敗的概率為q
,成功的概率為p
,並且所有位置和所有匹配的前綴長度都相等(如果可能),則預期數為
p.N(M-N+2)/2 + q.(N+1)(M-N+1)/2 = N(M-N+2)/2 + q(M-1)/2.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.