數據結構--第四章串、數組和廣義表總結


知識點:

 1.串:

關於串的學習,我最大的收獲是理解了KMP算法(解決串的模式匹配問題)和了解了Manacher算法(解決求字符串最長回文問題)。

在這一過程中,我常驚嘆算法的巧妙,感慨前人的智慧結晶,以下是我對這兩種算法的理解:

 

(1)KMP算法:

  這里就不貼代碼了,就說說它的實現原理。具體可以看這里利用KMP算法解決串的模式匹配問題(c++) -- 數據結構

主串和模式串匹配到某一個位置發現 主串中1的部分和模式串中2部分不匹配時,

模式串就會移動一定的位置,如下圖:

 

那么我們該移動多少呢?

我們繼續往下看,上下這兩個字符串分別是原來模式串的位置,和移動后模式串的位置。

能夠這樣移動的前提是保證 A == B,原來的匹配點截至到了1和2(即d)部分,

模式串移動之后匹配點就變成了1和c部分的比較。

 

 

為了能夠實現KMP算法中模式串的移動,需要引入一個next[ ]數組。

next[ ] 存放已匹配子串中最長前后綴長度

 以紅色部分c為例子:

已匹配的子串:abaab   →  最長前后綴ab  長度為2

 

 

KMP算法應用:PowerString問題(求字符串的最小周期)

 

(2)Manacher算法(馬拉車算法):

 

 談談我對Manacher算法的理解

 

2.數組:

至於數組的學習,最大的收獲和成就就是理解了十字鏈表的原理和操作過程,並成功將以實現。

以下博客已經寫得挺詳細的了,就不再重復聲明:

利用十字鏈表壓縮稀疏矩陣(c++)-- 數據結構

 


 

編程時遇到的困難:

 

1.利用KMP算法解決串的模式匹配問題(c++) -- 數據結構

2.利用十字鏈表壓縮稀疏矩陣(c++)-- 數據結構

 


 

總結及學習心得:

 在作業和實踐的題目中,我都選擇了相對來說困難的完成方式,這對我來說是一種得到鍛煉和學習的最好方式。

縱使過程很痛苦,熬了大半個星期的夜,幸運的是結果還算是差強人意。

 

——林子里有兩條路,我選擇了行人稀少的那一條,它改變了我的一生。(《未選擇的路》)

 


 

目標:

 保持當前的學習熱情,高要求嚴格自己,學習更多更巧妙的算法。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM