![數(shù)據(jù)結(jié)構(gòu)教學(xué)課件:第5講串_第1頁(yè)](http://file4.renrendoc.com/view/14b0ad2fe9184844e841a5d14e439376/14b0ad2fe9184844e841a5d14e4393761.gif)
![數(shù)據(jù)結(jié)構(gòu)教學(xué)課件:第5講串_第2頁(yè)](http://file4.renrendoc.com/view/14b0ad2fe9184844e841a5d14e439376/14b0ad2fe9184844e841a5d14e4393762.gif)
![數(shù)據(jù)結(jié)構(gòu)教學(xué)課件:第5講串_第3頁(yè)](http://file4.renrendoc.com/view/14b0ad2fe9184844e841a5d14e439376/14b0ad2fe9184844e841a5d14e4393763.gif)
![數(shù)據(jù)結(jié)構(gòu)教學(xué)課件:第5講串_第4頁(yè)](http://file4.renrendoc.com/view/14b0ad2fe9184844e841a5d14e439376/14b0ad2fe9184844e841a5d14e4393764.gif)
![數(shù)據(jù)結(jié)構(gòu)教學(xué)課件:第5講串_第5頁(yè)](http://file4.renrendoc.com/view/14b0ad2fe9184844e841a5d14e439376/14b0ad2fe9184844e841a5d14e4393765.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、字符串串類型的定義串的表示和實(shí)現(xiàn)模式匹配算法串操作應(yīng)用舉例 串類型的定義1、名詞術(shù)語(yǔ) 串(String)(或字符串),是由零個(gè)或多個(gè)字符組成的有限序列。一般記做s=a1a2an(n=0)串的長(zhǎng)度,串中字符的數(shù)目n??沾∟ull string),零個(gè)字符的串,它的長(zhǎng)度為零。子串,串中任意個(gè)連續(xù)的字符組成的子序列稱為該串的子串。 你可以委婉地問(wèn)你的GG:“假如你要向你喜歡的人表白的話,我的名字是你的告白語(yǔ)中的子串嗎?”主串,包含子串的串。位置,字符在序列中的序號(hào)為該字符在串中的位置.例:4個(gè)串a(chǎn)=BEI,b=JING, c=BEIJING,d=BEI JING兩個(gè)串相等,當(dāng)且僅當(dāng)這兩個(gè)串的值相等
2、.空格串 (blank string,請(qǐng)注意此處不是空串),由一個(gè)或多個(gè)空格組成的串.空串,用” ”表示. 串的表示和實(shí)現(xiàn) 順序存儲(chǔ)表示 鏈存儲(chǔ)表示順序存儲(chǔ)表示思想:用一組地址連續(xù)的存儲(chǔ)單元存儲(chǔ)串值的字符序列C語(yǔ)言表示:用一個(gè)字符數(shù)組存儲(chǔ)一個(gè)串,c 語(yǔ)言中以0作為串的結(jié)束標(biāo)志。串的實(shí)際長(zhǎng)度可在這預(yù)定義長(zhǎng)度的范圍內(nèi)隨意,超過(guò)預(yù)定義長(zhǎng)度的串值則被舍去,稱為“截?cái)唷薄;具\(yùn)算實(shí)現(xiàn) 1.串聯(lián)接Concat(&T,S1,S2)S10S20S1S2TT0MAXSTRLEN( a ) S10+S20MAXSTRLENS10S20T0MAXSTRLEN( b ) S10MAXSTRLENT0MAXSTRLEN
3、( c ) S10=MAXSTRLENS2中被截去的部分S10S20S2串全部被截去S1S1S2S2TT算法實(shí)現(xiàn)Concat(SString &T,SString S1,SString S2) if (S10+S20=MAXSTRLEN) / 未截?cái)?T1.S10=S11.S10; TS10+1.S10+S20=S21.S20; T0=S10+S20; uncut =TRUE;else if(S10MAXSTRLEN) / 截?cái)?T1.S10=S11.S10; TS10+1.MAXSTRLEN=S21.MAXSTRLEN-S10; T0= MAXSTRLEN; uncut =FALSE;els
4、e / 截?cái)?僅取S1) T0 .MAXSTRLEN= S10 .MAXSTRLEN; uncut =FALSE;return uncut;2.求子串SubString(&Sub,S,pos,len)初始條件:串S存在,1posStrLength(S)且 0lenStrLength(S)-pos+1 。操作結(jié)果:用Sub返回串S的第pos個(gè)字符起長(zhǎng)度為len的子串。算法思想: 求子串的過(guò)程即為復(fù)制字符序列的過(guò)程,將串S中從第pos個(gè)字符開始長(zhǎng)度為len的字符序列復(fù)制到串Sub中。算法實(shí)現(xiàn)SubString(SString &Sub,SString S,int pos,int len)if(po
5、sS0 | lenS0-pos+1) return ERROR;Sub1.len=Spos.pos+len-1;Sub0=len;return OK; 鏈存儲(chǔ)表示思想:鏈串的存儲(chǔ)形式與一般的鏈表類似,是將存儲(chǔ)區(qū)分成許多結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)有一個(gè)存放字符的域和一個(gè)存放指向下一個(gè)結(jié)點(diǎn)的指針域。鏈串中的一個(gè)存儲(chǔ)結(jié)點(diǎn)可以存儲(chǔ)1個(gè)或多個(gè)字符,通常將鏈串中每個(gè)存儲(chǔ)結(jié)點(diǎn)所存儲(chǔ)的字符個(gè)數(shù)稱為結(jié)點(diǎn)大小。 w v u x y z # # head 結(jié)點(diǎn)大小為1的串的鏈表存儲(chǔ)結(jié)構(gòu)結(jié)點(diǎn)大小為4的串的鏈表存儲(chǔ)結(jié)構(gòu)串的鏈表存儲(chǔ)方式w vu x y z headC語(yǔ)言表示: #define CHUNKSIZE 80 /可由用戶定
6、義的塊(結(jié)點(diǎn))大小typedef struct Chuck char chCHUNKSIZE;struct Chuck *next;Chuck;typedef struct Chuck *head,*tail; /串的頭和尾指針 int curlen; /串的當(dāng)前長(zhǎng)度LString; 串的模式匹配算法 求子串位置的定位函數(shù)Index(S,T,pos)子串定位操作通常稱做串的模式匹配(其中T稱為模式串),是各種串處理系統(tǒng)中最重要的操作之一.初始條件:串S和T存在,T非空,1=pos=StrLength(S)操作結(jié)果:若主串S中存在和串T值相同的子串,則返回它在主串S中第pos個(gè)字符之后第一次出現(xiàn)
7、的位置;否則返回值0.算法演示:Index(S,T,1)a b a b c a b c a c b a b a b c a cSTi=1j=1第一趟匹配i=2j=2i=3j=3a b a b c a b c a c b a b a b c a cST第二趟匹配i=2j=1a b a b c a b c a c b a b a b c a cST第三趟匹配i=3j=1i=4j=2i=5j=3i=6j=4i=7j=5a b a b c a b c a c b a b a b c a cST第四趟匹配i=4j=1a b a b c a b c a c b a b a b c a cST第五趟匹配i=
8、5j=1a b a b c a b c a c b a b a b c a cST第六趟匹配i=6j=1i=7j=2i=8j=3i=9j=4i=10j=5i=11j=6int Index(SString S,SString T,int pos)/返回子串T在主串S中第pos個(gè)字符之后的位置。/若不存在,返回值為0。/ 其中,T非空,1posStrLength(S) i=pos; j=1;while (i=s0&jT0) return i-T0;else return 0;)/Index 算法實(shí)現(xiàn)最難的一個(gè)算法KMP算法dsfdskjgldkjgjgrglsiggls“s”不匹配時(shí),下一次比較應(yīng)
9、該從哪里開始?有人提出“kj”根本與“模式”沒(méi)關(guān)系看都不用看只需要從“g”開頭的字符開始比較。可是,不比較你怎么知道沒(méi)關(guān)系?反正要想個(gè)辦法不要挨個(gè)比較,比如:0000000000000000000000000000000000001000001能不能把5個(gè)連續(xù)的0看做一個(gè)字符?經(jīng)過(guò)研究,KMP算法提出一個(gè)與目標(biāo)串無(wú)關(guān)的預(yù)處理算法!這樣:模式=abcabcd序號(hào)=1234567假如“d”失配,意味著什么?意味著,“1”號(hào)字符a可以和“4”號(hào)字符對(duì)齊的那個(gè)字符比較!手工算一遍,感受一下:設(shè)模式串Pattern = a b c c a b c c a b c a Pattern 數(shù)組編號(hào):0 1 2
10、 3 4 5 6 7 8 9 10 11假如失配該和誰(shuí)比較?000001234567放在一個(gè)一位數(shù)組next中Next0=0Next7=3Next8=4假設(shè)next里面的值已經(jīng)知道了,那么新的匹配過(guò)程:目標(biāo)串中某處T.模式串中某處M.假如“T”=“M”,那么上下字符串指示比較的“指針”i+,j+假如失配:此時(shí)nextj=k那么,由于“M”之前有k個(gè)字符和模式串前k個(gè)字符相同而且也與目標(biāo)串中字符“T”之前的k個(gè)字符相同,所以,此時(shí)要與“T”繼續(xù)比較的應(yīng)該是:?!這樣的算法有什么意義呢?答:原來(lái)挨個(gè)比較時(shí),i已經(jīng)+了好遠(yuǎn)了,但是一旦失配i的值需要調(diào)整小。而kmp算法中,i永遠(yuǎn)向后走,速度當(dāng)然快很多
11、。整個(gè)KMP算法就是依賴這個(gè)next數(shù)組的,這個(gè)next怎么求?假設(shè)已經(jīng)知道了next1next4怎樣推導(dǎo)出next5,next6 1 2 3 4 5 6 B = a b a b a c next = 0 0 1 2 ? ?因?yàn)閚ext4=2,說(shuō)明B1B2= B3B4,又因?yàn)锽5=B3=Bnext4+1所以next5=next4+1=3可是B6!=Bnext5+1,所以B6不能簡(jiǎn)單地等于4既然B5=B3,而B6!=B4,那么會(huì)不會(huì)和BnextB3+1相等呢?結(jié)果是不相等,那就只能是0了。有個(gè)人解釋是這樣的(和教材不一樣)一般教材上的說(shuō)法是這樣的:(很多人吐槽說(shuō)根本看不懂)(1)nextj =
12、-1(j=0);(2)nextj = Maxk|1kj且pj-kpj-k+1.pj-1=p0p1.pk-1(j!=0且集合有解);(3)nextj = 0(j!=0且集合無(wú)解);現(xiàn)在假設(shè)已知nextj=k,那么: “p0p1.pk-1” = “pj-kpj-k+1.pj-1”假如如果pj=pk 顯然nextj+1=k+1=nextj+1由于next0=-1;所以似乎勝利在望了。譯文:比如:已知next9=3p0p1p2 = p6p7p8假如如果p3 = p9那么next10=4 問(wèn)題是p3 != p9,next10=?如果pj!=pk,將模式串向右滑動(dòng)至k(k=nextkkj)位置,使得主串的
13、pj字符與模式串的pk字符比較。如果此時(shí)pj=pk(kk),則有pj-kpj-k+1.pj-1pj=p0p1.pk-1pk,由next函數(shù)的定義該式等價(jià)于:nextj+1=k+1=nextk+1如果此時(shí)pj!=pk,則將模式串繼續(xù)向右滑動(dòng),直至pj和模式串的某個(gè)字符pk_lucky匹配成功和的討論說(shuō)明,無(wú)論經(jīng)過(guò)多少次滑動(dòng),只要主串的pj最終與模式串pk_lucky字符匹配成功,則主串字符指針(j+1)位置處的nextj+1一定可以由nextt(其中t=j)加1求得。盡管向右滑動(dòng),一直到j(luò)=nextt=-1,很不幸找不到k使得pj=pk,這相當(dāng)于匹配過(guò)程中無(wú)解,此時(shí)由定義知nextj+1=0第一
14、次判斷時(shí)k=-1,導(dǎo)致j=1,k=0,next1=0第二次判斷時(shí)如果k!=-1,data1!=data0執(zhí)行else,k=-1假如模式串=0000000001執(zhí)行結(jié)果:初值:k=-1,j=0,next0=-1If成立導(dǎo)致:k=0,j=1,next1=0If成立導(dǎo)致:k=1,j=2,next2=1If成立導(dǎo)致:k=2,j=3,next3=2If成立導(dǎo)致:k=3,j=4,next4=3. k=7,j=8,next8=7 k=8,j=9,next9=8J=9結(jié)束假設(shè)模式串=000000000101,j=9還要執(zhí)行將導(dǎo)致:由于k!=-1,data8!=data9執(zhí)行else k=nextk=7.5,4,3,2,1,0,-1當(dāng)k再次=-1時(shí),執(zhí)行if語(yǔ)句,導(dǎo)致k=0,j=10,next10=00123456789至此,我們終于明白,K和J是從頭開始k為尾子串和j為尾的比較 01234567假設(shè)模式串=abcdabct程序執(zhí)行
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 8《我們受到特殊保護(hù)》(第2課時(shí))(說(shuō)課稿)2024-2025學(xué)年統(tǒng)編版道德與法治六年級(jí)上冊(cè)001
- 2016春九年級(jí)化學(xué)下冊(cè) 10.3《金屬的冶煉與防護(hù)》說(shuō)課稿 (新版)北京課改版
- 2024-2025學(xué)年新教材高中地理 第三章 環(huán)境與國(guó)家安全 第3節(jié) 自然保護(hù)區(qū)與生態(tài)安全說(shuō)課稿 中圖版選擇性必修3
- 2024秋八年級(jí)數(shù)學(xué)上冊(cè) 第十五章 分式15.2 分式的運(yùn)算 2分式的乘方說(shuō)課稿(新版)新人教版
- 二零二五年度蘇州離婚協(xié)議書模板:婚前財(cái)產(chǎn)及婚后債務(wù)處理3篇
- 2023三年級(jí)數(shù)學(xué)上冊(cè) 七 慶元旦-時(shí)、分、秒的認(rèn)識(shí)說(shuō)課稿 青島版六三制
- 上海市標(biāo)準(zhǔn)勞動(dòng)合同范本
- 二零二五年度離婚協(xié)議書范本修訂與風(fēng)險(xiǎn)評(píng)估合同3篇
- 活動(dòng)贊助合同(2篇)
- 2023七年級(jí)英語(yǔ)下冊(cè) Unit 1 Can you play the guitar Section B 第4課時(shí)(2a-2c)說(shuō)課稿 (新版)人教新目標(biāo)版001
- 2025-2030年中國(guó)清真食品行業(yè)運(yùn)行狀況及投資發(fā)展前景預(yù)測(cè)報(bào)告
- 廣東省茂名市電白區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)生物學(xué)試卷(含答案)
- 《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》全文
- 山東省濱州市2024-2025學(xué)年高二上學(xué)期期末地理試題( 含答案)
- 2025年河南洛陽(yáng)市孟津區(qū)引進(jìn)研究生學(xué)歷人才50人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 蛋雞生產(chǎn)飼養(yǎng)養(yǎng)殖培訓(xùn)課件
- 數(shù)字化轉(zhuǎn)型中的職業(yè)能力重構(gòu)
- 運(yùn)用PDCA降低住院患者跌倒-墜床發(fā)生率
- 2025屆高中數(shù)學(xué)一輪復(fù)習(xí)專練:橢圓(含解析)
- 立春氣象與生活影響模板
評(píng)論
0/150
提交評(píng)論