字串
(1)串的邏輯結構
串:零個或多個字元組成的有限序列。
串長度:串中所包含的字元個數。
空串:長度為0的串,記為:" 「。
非空串通常記為:
s=」 s1 s2 …… sn "
其中:s是串名,雙引號是定界符,雙引號引起來的部分是串值 ,si(1≤i≤n)是乙個任意字元。
子串:串中任意個連續的字元組成的子串行。
主串:包含子串的串。
子串的位置:子串的第乙個字元在主串中的序號。
s1="ab12cd "
s2=「ab12」
s3=「ab13」
(2)串的儲存結構
順序串:用陣列來儲存串中的字串行。
串的長度的表示:
1,用乙個變數來表示串的實際長度。
2,在串尾儲存乙個不會在串**現的特殊字元作為串的終結符,表示串的結尾。
3,用陣列的0號單元存放串的長度,從1號單元開始存放串值。
鏈結串:用鏈結儲存結構來儲存串。
改造鍊錶實現串的鏈結儲存:
1,非壓縮形式
2,壓縮形式
模式匹配
模式匹配:給定主串s="s1s2…sn"和模式t=「t1t2…tm」,在s中尋找t 的過程稱為模式匹配。如果匹配成功,返回t 在s中的位置,如果匹配失敗,返回-1。
應用包括:生物資訊學(基因表達分析,基因配對)、資訊檢索、拼寫檢查、語言翻譯、資料壓縮、網路入侵檢測。
bf演算法
基本思想:
從主串s的第0個字元開始和模式t 的第0個字元進行比較,
若相等,則繼續比較兩者的後續字元;
否則,從主串s的第1個字元開始和模式t 的第0個字元進行比較,
重複上述過程,直到t 中的字元全部比較完畢,則說明本趟匹配成功;或s中字元全部比較完,則說明匹配失敗。
說明:模式匹配過程要進行多趟的匹配,每趟匹配要進行若干次的比較
偽**敘述
1.在串s和串t中設比較的起始下標i和j;
2. 迴圈直到s或t的所有字元均比較完;
2.1 如果s[i]==t[j],繼續比較s和t的下乙個字元;
2.2 否則,將i和j回溯(i=i-j+1,j=0),準備下一趟比較;
3. 如果t中所有字元均比較完,則匹配成功,返回匹配的起始比較下標(i-j);否則,匹配失敗,返回-1;
int bf(char s[ ], char t[ ])
設串s長度為n,串t長度為m,在匹配成功的情況下,考慮兩種
極端情況:
⑴ 最好:不成功的匹配都發生在串t的第乙個字元。
例如:s=「aaaaaaaaaabcdccccc」
t="bcd "
1,設匹配成功發生在si-1處,在這次匹配成功的過程中,總共進行了多少次比較?(包括之前失敗的比較次數)
在i-1趟不成功的匹配中共比較了i-1次,
第i趟成功的匹配共比較了m次,
所以總共比較了i-1+m次.
s=「aaaaaaaaaabcdccccc」
t="bcd "
2,所有匹配成功的可能情況共有n-m+1種
3,匹配成功時平均的比較次數:
**最壞情況:**不成功的匹配都發生在串t的最後乙個字元。
1,設匹配成功發生在si處,則在這次成功的比較過程中共進行了多少次比較?(包括之前失敗的比較)
在i-1趟不成功的匹配中比較了(i-1)×m次,
第i趟成功的匹配共比較了m次,
所以總共比較了i×m次。
例如:s=「aaaaaaaaaaabccccc」
t=「aaab」
2,所有匹配成功的可能情況共有n-m+1種
3,匹配成功時平均的比較次數:
pi 表示在第i個位置上匹配成功的概率,pi=1/(n-m+1)
pi 表示在第i個位置上匹配成功的概率,pi=1/(n-m+1)
問題:
bf演算法時間效能低:
在每趟匹配不成功時存在大量回溯,沒有利用已經部分匹配的結果。
如何在匹配不成功時主串不回溯?
主串不回溯,模式就需要向右滑動一段距離。(i不移動,j>=0的位置繼續進行下一次的比較)
第八次作業
練習題 1 怎麼查出通過 from xx import xx導 的可以直接調 的 法?在test package資料夾中建立 init py檔案,裡邊什麼都不需要編輯。在 中把test package的檔案的路徑加入到python直譯器可以搜尋到的路徑列表中,這裡就用到了python的包sys模組 ...
第八次作業
用python實現k均值演算法,鳶尾花花瓣長度資料做聚類並用散點圖顯示。import numpy as np 隨機生成乙個陣列 x np.random.randint 1,100,20,1 y np.zeros x.shape 0 dtype int k 3iris length 1.4,1.4,1...
第八次作業
問題 答案這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 更加熟練掌握markdown語法的相關用法 這個作業在那個具體方面幫助我實現目標 更加熟練的使用markdown,對本週知識總結 參考文獻 pta常見問題解析,c語言程式設計 1.pta實驗作業 1.1 求整數...