《數(shù)據(jù)結(jié)構(gòu)》課件1第4章 串_第1頁
《數(shù)據(jù)結(jié)構(gòu)》課件1第4章 串_第2頁
《數(shù)據(jù)結(jié)構(gòu)》課件1第4章 串_第3頁
《數(shù)據(jù)結(jié)構(gòu)》課件1第4章 串_第4頁
《數(shù)據(jù)結(jié)構(gòu)》課件1第4章 串_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章串串的定義串的存儲(chǔ)結(jié)構(gòu)串的模式匹配4.1串的定義2描述各種信息的文字符號(hào)序列通常稱為字符串,簡稱串。在計(jì)算機(jī)上的非數(shù)值處理一般都是字符串?dāng)?shù)據(jù)。串是一種內(nèi)容受限的線性表。串是由零個(gè)或多個(gè)字符構(gòu)成的有限序列,記為:s="a1a2…an"例如:"thisisastring","is"

,"

"

串長:串值中字符個(gè)數(shù)(n)空串:長度為0的串空格串:僅含有空格字符的串(n不為0)子串:串中若干相鄰字符組成的子序列主串:包含子串的串子串中第0個(gè)字符在主串中出現(xiàn)的位置稱為此子串在該主串中的位置。

串名串值串之間的大小關(guān)系:設(shè)s1="a0a1…am-1",s2="b0b1…an-1"若m=n且ai=bi,i=0,1,…m-1,則s1=s2(2)滿足下面條件之一,則s1<s2m<n,且ai=bi,i=0,1,…m-1 例如:"abc"與"abcd"存在某個(gè)0<k≤min(m,n),使得ai=bi,i=0,1,…k-1,ak<bk

例如:"abc"與"adc"(3)不滿足以上條件,則s1>s24.1串的定義3串的抽象數(shù)據(jù)類型定義4.2串的存儲(chǔ)結(jié)構(gòu)1.串的順序存儲(chǔ)4串的順序存儲(chǔ)結(jié)構(gòu)簡稱為順序串。類似于順序表,順序串也是用一組地址連續(xù)的存儲(chǔ)單元存儲(chǔ)串中的字符序列。為了表示串的結(jié)尾,一般在串尾存儲(chǔ)一個(gè)不會(huì)在串中出現(xiàn)的特殊字符作為串的終結(jié)符。例如,C++語言中用’\0’表示串的結(jié)束。4.2串的存儲(chǔ)結(jié)構(gòu)2.串的鏈?zhǔn)酱鎯?chǔ)5串采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)存儲(chǔ)時(shí)稱為鏈串,可采用帶頭結(jié)點(diǎn)的單鏈表來表示。鏈串的組織形式與一般的單鏈表類似,主要區(qū)別在于鏈串中的一個(gè)結(jié)點(diǎn)可以存儲(chǔ)多個(gè)字符。通常將鏈串中每個(gè)結(jié)點(diǎn)所存儲(chǔ)的字符個(gè)數(shù)稱為結(jié)點(diǎn)大小。在鏈?zhǔn)酱鎯?chǔ)方式中,結(jié)點(diǎn)大小的選擇直接影響著串處理的效率。存儲(chǔ)密度?。ㄈ缃Y(jié)點(diǎn)大小為1)時(shí),運(yùn)算處理方便,但存儲(chǔ)占用量大。存儲(chǔ)密度大時(shí),一些基本操作(如插入、刪除)的實(shí)現(xiàn)有所不便,而且可能引起大量字符移動(dòng)結(jié)點(diǎn)大小為4的鏈表:結(jié)點(diǎn)大小為1的鏈表:結(jié)點(diǎn)大小大于1時(shí),鏈表的最后一個(gè)結(jié)點(diǎn)不一定全被串值占滿,未占用的數(shù)據(jù)域里應(yīng)補(bǔ)上不屬于串的字符集的特殊符號(hào)4.3串的模式匹配6設(shè)T="t0t1…tn-1",P="p0p1…pm-1",其中0<m≤n。如要在字符串T中查找是否有與字符串P相同的子串,則稱字符串T為目標(biāo)串或主串,稱字符串P為模式串或子串,在T中從位置pos開始查找與P相同的子串第一次出現(xiàn)的位置的過程稱為字符串模式匹配。4.3串的模式匹配1.BF算法7Brute-Force算法簡稱為BF算法,也稱簡單模式匹配算法。BF算法的基本思想是蠻力匹配,即從主串s的第一個(gè)字符開始和模式串t的第一個(gè)字符進(jìn)行比較,若相等,則繼續(xù)逐個(gè)比較后續(xù)字符;否則,從主串s的第二個(gè)字符開始重新與模式串t的第一個(gè)字符進(jìn)行比較,以此類推。若從主串s的第i個(gè)字符開始,每個(gè)字符依次和模式串t中的對(duì)應(yīng)字符相等,則匹配成功,返回位置i;否則,匹配失敗,返回-1。第1趟TabaababP

abab第2趟TabaababPabab第3趟TabaababPabab第4趟TabaababPabab4.3串的模式匹配1.BF算法8(1)用start保存主串比較的開始位置,初值為0。(2)用i和j指示主串s和模式串t中當(dāng)前正待比較的字符下標(biāo),i和j的初值均為0。(3)重復(fù)下述操作,直到s或t的所有字符比較完畢:①若s[i]和t[j]相等,則繼續(xù)比較s和t的下一對(duì)字符;②否則,下標(biāo)i和j分別回溯,開始下一趟匹配。(4)若t中所有字符全部比較完畢,則匹配成功,返回本趟匹配的起始位置;否則匹配失敗,返回0。【算法步驟】intBF(strings,stringt){ inti=0,j=0,start=0; while(i<s.length()&&j<t.length()) { if(s[i]==t[j]) { j++;i++; } else { start++; i=start; j=0; } } if(j==t.length()) returnstart+1;

else return0;}4.3串的模式匹配1.BF算法9最好情況每趟不成功的匹配都發(fā)生在模式串t的第一個(gè)字符與主串s中相應(yīng)字符的比較。假設(shè)從主串的第i個(gè)位置開始與模式串匹配成功,則前在i-1趟不成功的匹配中共比較了i-1次,第i趟成功的匹配中共比較了m次,總比較次數(shù)為i-1+m。對(duì)于成功匹配的主串,其起始位置由1到n-m+1,假設(shè)這n-m+1個(gè)位置上的匹配成功概率相等,則最好情況下匹配成功的平均比較次數(shù)為:【算法分析】設(shè)主串s長度為n,模式串t長度為m。時(shí)間復(fù)雜度為n+m

時(shí)間復(fù)雜度為n×m4.3串的模式匹配2.KMP算法10BF算法簡單但效率低。造成BF算法效率低的主要原因是回溯,即在某趟匹配失敗后,主串s要回溯到本趟匹配開始字符的下一個(gè)字符,模式串t要回溯到第一個(gè)字符,而這些回溯往往是不必要的。改進(jìn)算法——KMP消除回溯

本章小結(jié)(1)串是一種內(nèi)容受限的線性表,它限定了表中的元素為字符。(2)串有兩種基本存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論