VB2003下實現的KMP查詢演算法

2022-02-17 05:09:48 字數 1971 閱讀 6346

增強型的模式匹配演算法,

kmp查詢演算法。全稱是克努特

-莫里斯

-普拉特演算法。是一種在乙個串內查詢第乙個匹配子串位置的演算法。之所以是增強型的,是應為它修改普通演算法中失配的時候,被查詢串的查詢起始位置只向後移動乙個單位的辦法。通過首先分析匹配串的邏輯,給每乙個專案位置加入乙個權值。這樣在失配的時候,就可以根據失配專案單位所對應的權值,順移多個位置再次匹配。具體的演算法可以參考《資料結構》一書。

現在我用

vb.net 2003

實現這個演算法。主函式

kmpsearch

進行實際的匹配操作。子函式

kmpsearchgetnextarray

負責計算匹配串每個專案單位對應的權值。

稍後推出使用

vb2005

泛型的kmp

查詢演算法。

public

shared

function

kmpsearch(byval

srcas

array, byval

keyas

array) as

integer

dimretas

integer = 0

dimarrnext() as

integer

diminti

asinteger = 1

dimintj

asinteger = 1 if

srcis

nothing

orelse

keyis

nothing

orelse

key.length > src.length

then

ret = -1

else

arrnext = kmpsearchgetnextarray(key)

while

inti

<= src.length

andalso

intj

<= key.length if

intj = 0

orelse (equals(src(inti - 1), key(intj - 1)) = true) then

inti = inti + 1

intj = intj + 1

else

intj = arrnext(intj)

endif

endwhile if

intj > key.length

then

ret = inti - key.length - 1

else

ret = -1

endif

endif

return

ret

endfunction

private

shared

function

kmpsearchgetnextarray(byval

keyas

array) as

integer()

dimarrnext(key.length) as

integer

dimintj

asinteger = 1

dimintk

asinteger = 0

arrnext(1) = 0

while

intj

< key.length if

intk = 0

orelse (equals(key(intj - 1), key(intk - 1)) = true) then

intj = intj + 1

intk = intk + 1

arrnext(intj) = intk

else

intk = arrnext(intk)

endif

endwhile

return

arrnext

endfunction

VB的檔案拖放實現

vb中,很多控制項都可以實現拖放功能。拖放功能有內部控制項間的拖放和由程式外部對程式本身的拖放。檔案拖放應該使用oledragdrop事件,而不是dragdrop事件。oledragdrop事件的語法如下 private subobject oledragdrop data as dataobjec...

在VB6,VS2003的程式加XP面板

在vb6,vs2003的程式加xp 一 新增以下部分為模組檔案 option explicit private declare function getversionex lib kernel32 alias getversionexa lpversioninformation as osversi...

VB工程下的各個檔案

ctl vb 使用者控制項 的 檔案 儲存了其中的 屬性等 ctx vb 使用者控制項 的資源檔案 儲存了該使用者控制項中使用的 ico等資源 frm vb 窗體 的 檔案 儲存了其中的 屬性等 frx vb 窗體 的資源檔案 儲存了該使用者控制項中使用的 ico等資源 bas vb 模組 的 檔案...