。
這個小女孩是誰?叫什么名字?你好,
她是:娜奧美麗莎
一對可愛的美韓混血雙胞胎,分別是Naomi(中文:娜奧美,韓語:#45208;#50724;#48120;)和Lisa(中文:麗莎,韓語:#47532;#49324;)
父親:美國人,母親:韓國人。
詳細資料請見:
若有問題請追問,如果滿意請采納 。
希望對你有幫助,望采納 。

文章插圖
什么是KMP算法?KMP就是串匹配算法
運用自動機原理
比如說
我們在S中找P
設P={ababbaaba}
我們將P對自己匹配
下面是求的過程:{依次記下匹配失敗的那一位}
[2]ababbaaba
......ababbaaba[1]
[3]ababbaaba
........ababbaaba[1]
[4]ababbaaba
........ababbaaba[2]
[5]ababbaaba
........ababbaaba[3]
[6]ababbaaba
..............ababbaaba[1]
[7]ababbaaba
..............ababbaaba[2]
[8]ababbaaba
.................ababbaaba[2]
[9]ababbaaba
.................ababbaaba[3]
得到Next數組『0,1,1,2,3,1,2,2,3』
主過程:
[1]i:=1 j:=1
[2]若(jm)或(in)轉[4]否則轉[3]
[3]若j=0或a[i]=b[j]則【inc(i)inc(j)轉[2]】否則【j:=next[j]轉2】
[4]若jm則return(i-m)否則return -1;
若返回-1表示失敗,否則表示在i-m處成功
若還不懂mail:[email protected]
參考一下這里吧:
kmp 算法原理樸素算法
先看看最“樸素”的算法: ///find a template in a string. #includestring.h #includestdio.h int Index(char *S, char *T, int pos) { int k=pos, j=0; while(k strlen(S)jstrlen(T))//未超出字符串的長度 { if (S[k] == T[j]) { ++k; ++j;} //如果相同,則繼續向后比較 else {k = k-j+1; j =0;} //如果不同,就回溯,重新查找 } if (j == strlen(T)) return k-strlen(T); else return 0; }
編輯本段KMP算法
一種由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人設計的線性時間字符串匹配算法 。這個算法不用計算變遷函數δ,匹配時間為Θ(n),只用到輔助函數π[1,m],它是在Θ(m)時間內,根據模式預先計算出來的 。數組π使得我們可以按需要,“現場”有效的計算(在平攤意義上來說)變遷函數δ 。粗略地說,對任意狀態q=0,1,…,m和任意字符a∈Σ,π[q]的值包含了與a無關但在計算δ(q,a)時需要的信息 。由于數組π只有m個元素,而δ有Θ(m∣Σ∣)個值,所以通過預先計算π而不是δ,使得時間減少了一個Σ因子 。[1] KMP算法是通過分析子串,預先計算每個位置發生不匹配的時候,所需GOTO的下一個比較位置,整理出來一個next數組,然后在上面的算法中使用 。
編輯本段KMP算法的講解
當我們分析一個子串時,例如:abcabcddes. 需要分析一下,每個字符x前面最多有多少個連續的字符和字符串從初始位置開始的字符匹配 。然后+1就行了(別忘了,我們的字符串都是從索引1開始的)當然,不要相同位置自己匹配,默認第一個字符的匹配數是0 。
編輯本段定義
設字符串為 x1x2x3...xn ,其中x1,x2,x3,... xi,... xn均是字符,設ai為字符xi對應的整數 。則a=m,當且僅當滿足如下條件:字符串x1x2...xm equals 字符串x(i-m+1)...xi-1 xi 并且x1x2...xm x(m+1) unequals x(i-m) x(i-m+1)...xi-1 xi 。
編輯本段舉例
abcabcddes 0111234111 |----------------------默認是0 --| | |-----------------不能自己在相同位置進行字符匹配,所以這里認為沒有匹配字符串,所以0+1 =1,繼續從1開始匹配 ------| | |-----------前面的字符和開始位置的字符相同,所以是2,3,4 -----------| | | |-------不匹配只能取1 。希望能明白的是,如果開始字符是 Ch1的話,那么我們就是要在串中第2個Ch1后面的位置開始自己和自己匹配,計算最大的吻合度 。程序寫出來就是: void GetNext(char* T, int *next) { int k=1,j=0; next[1]=0; while( k〈 T[0] ){ if (j ==0 || T[k] == T[j]) { ++k; ++j; next[k] = j; } else j= next[j]; } } 但是這個不是最優的,因為他沒有考慮aaaaaaaaaaaaaaaaaaab的情況,這樣前面會出現大量的1,這樣的算法復雜度已經和最初的樸素算法沒有區別了 。所以稍微改動一下: void GetNextEx(char *T, char *next) { int k=1,j=0; next[1] = 0; while(kT[0]) { if (j == 0 || T[k] == T[j]) { ++k; ++j; if (T[k] == T[j]) next[k] = next[j]; else next[k] = j; } else j = next[j]; } } 現在我們已經可以得到這個next字符串的值了,接下來就是KMP算法的本體了: 相當簡單: int KMP(char* S, char* T, int pos) { int k=pos, j=1; while (k){ if (S[k] == T[j]){ ++k; ++j; } else j = next[j]; } if (jT[0]) return k-T[0]; else return 0; } 和樸素算法相比,只是修改一句話而已,但是算法復雜度從O(m*n) 變成了:O(m)
【win10管理怎么啟用 win10如何啟用】編輯本段KMP算法的偽代碼
KMP-MATCHER(T,P) 1 n ← length[T] 2 m ←length[P] 3 π ← COMPUTE-PREFIX-FUNCTION(P) 4 q ← 0 △Number of characters matched. 5 for i ← 1 to n △Scan the text from left to right. 6 do while q0 and P[q+1]≠T[i] 7 do q ← π[q] △Next character does not match. 8 if P[q+1]=T[i] 9 then q ← q+1 △Next character matches. 10 if q=m △Is all of P matched? 11 then print “Pattern occurs with shift” i-m 12 q ← π[q] △Look for the next match. COMPUTE-PERFIX-FUNCTION(P) 1 m ← length[P] 2 π[1] ← 0 3 k ← 0 4 for q ← 2 to m 5 do while k0 and P[k+1]≠P[q] 6 do k ← π[k] 7 if P[k+1]=P[q] 8 then k ← k+1 9 π[q] ← k 10 return π[1]
編輯本段KMP算法的c++實現
//c++實現的KMP算法,所有涉及字符串,其初始下標從0開始(上述算法均是從1開始) //example: char s[100],t[100];cinst;KMP(s,t); //獲取待查詢模式的next數組 int* get_next(char* T, int* next){ int i = 0, j = -1; int length = strlen(T); int *temp = next; *next = -1; while(i length){ if(j==-1 || *(T+i)==*(T+j)){ i++; j++; //優化后的get_next方法,可以防止出現形如"aaaaab"這種模式的計算退化 if(*(T+i)!=*(T+j)) *(next+i)=j; else *(next+i)=*(next+j); } else j=*(next+j); } return temp; } //KMP算法 int KMP(char *S, char *T){ int S_Length = strlen(S); int T_Length = strlen(T); //若模式長度大于字符串,則直接返回查詢失敗 if( S_LengthT_Length) return 0; int i = 0, j = 0; int* next = new int[T_Length]; get_next(T, next); while(iS_LengthjT_Length){ if(j == -1 || *(S+i) == *(T+j)){ i++; j++; } else j=*(next+j); } if(j=T_Length) return i-T_Length; return 0; } 在此提供一個更簡明的適用于字符串的kmp實現: #includeiostream #includestring.h int next[100]; void getnext(char b[]) { int i=1,j=0; //i是每個位子,j是回退的位子 next[1]=0; while(i=strlen(b)) { if(j==0||b[i-1]==b[j-1]) { i++; j++; next[i]=j; } else j=next[j]; //用上一個的 回退關系 } } int kmp(char a[],char b[]) { int i=1,j=1; //i是主串中的位子 ,j匹配串的位子 while(i=strlen(a)j=strlen(b)) { if(j==0||a[i-1]==b[j-1]) { i++; j++; } else j=next[j]; } if(jstrlen(b)) return i-strlen(b); else return 0; } int main() { char a[40],b[40]; printf("要匹配的主串:\n"); scanf("%s",a); printf("要匹配的子串:\n"); scanf("%s",b); getnext(b); printf("輸出next值:\n"); for(int i=1;i=strlen(b);i++) printf("%d ",next[i]); printf("\n"); printf("%d",kmp(a,b)); system("pause"); main(); return 0; }
編輯本段串的最大匹配算法
摘要:
給定兩個串S和T,長分別m和n,本文給出了一個找出二串間最大匹配的算法 。該算法可用于比較兩個串S和T的相似程度,它與串的模式匹配有別 。
關鍵詞:
模式匹配 串的最大匹配 算法 Algorithm on Maximal Matching of Strings Lin YuCai Xiang YongHong Zhang ChunXia Zhang JianJun (Computer Science Department of Yunnan Normal University Kunming 650092) ABSTRACT Given Two Strings S of length m and T of length n,the paper presents an algorithm which finds the maximal matching of them. The algorithm can be used to compare the similarility of the two strings S and T, it is different with the strings' pattren matching. KEY WORDS Pattern Matching Maximal Matching of Strings Algorithm
編輯本段問題的提出
字符串的模式匹配主要用于文本處理,例如文本編輯 。文本數據的存儲(文本壓縮)和數據檢索系統 。所謂字符串的模式匹配[2],就是給定兩個字符串S和T,長度分別為m和n,找出T中出現的一個或多個或所有的S,在這方面已經取得了不少進展[3][4][5][6][7][8][9][10][11] 。本文從文本處理的另一個角度出發,找出兩個串的最大匹配,比較其相似程度[1] 。它主要應用于文本比較,特別是在計算機輔助教學中 。顯然前者要找S的完全匹配,而后者并無此要求 。例如,若S=ABCD,T=EFABCDX,那么模式匹配的結果就是找出了T中的一個ABCD,而我們算法的結果就是S能與T的ABCD完全匹配,但是T中還有3個字符是比S多出來的,也就是說在S中有100%的字符與T中的匹配,而在T中有57%的字符與S中的匹配 。若S= ABCDFE,T=AFXBECDY 。則在模式匹配中S與T無匹配項,但在我們的算法中就能發現T中存在A,B,C,D,但D后不存在E,F 。而且S中也存在A,B,C,D,且具有順序性 。這樣就能公正地評價S,T的區別 。得知其相似程度 。文章的組織如下:首先介紹基本定義和問題的描述;第三節是算法設計;最后是本文總結 。
編輯本段問題的描述
設∑為任意有限集,其元稱為字符,w:∑→N為∑到N的函數,稱為∑的權函數(注:本文僅討論權值恒為1的情況) ?!?為∑上的有限字符串集合,那么對任意S,T∈∑*,設S=a1a2…am,T=b1b2…bn,m0,n0 。記m={1,2, …,m},n={1,2, …,n},則稱{(i,j)∣i∈m,j∈n,ai=bj}為S與T的匹配關系集,記作M(S,T),稱M為S與T的一個(容許)匹配,若對任意(i,j), ( i',j' )∈,① i i',當且僅當j j',② i= i'當且僅當j= j' 。S與T的匹配中滿足 最大者,稱為S與T的最大匹配 。若C(i,j)為N上的m×n矩陣,且滿足: 則稱矩陣C為串S與T的匹配關系陣 。于是求串S與T的最大匹配,等價于求C中的一個最大獨立點集M,它滿足,若ci,j,ci',j'∈M,則i i' 當且僅當j j',i=i'當且僅當j=j' 。我們稱這樣的最大獨立點集為C的最大C-獨立點集 。例:設∑為所有字母的集合,對任意x∈∑,w(x)≡1,設S與T分別為:S=“BOOKNEWS”,T=“NEWBOOKS” 。則我們可以得到S與T兩個匹配: 這里=5; 這里 =4 。顯然為串S與T的最大匹配 。S與T的匹配關系陣C可表示如下: 其中帶圈的部分為一最大C-獨立點集 。
編輯本段算法設計
我們僅就權值為一的情況進行討論 。設S和T為任意給定串,C為的S與T匹配關系陣,那么由2的討論知,求S與T的最大匹配問題,等價于求C的最大C-獨立點集問題 。因而,為了解決我們的問題,只要給出求C的最大C-獨立點集的算法就可以了 。顯然,為了求出C的最大C-獨立點集,我們可以采用這樣的方法:搜索C的所有C-獨立點集,并找出它的最大者 。這種方法是可行的,但并不是非常有效的 。這會使問題變得很繁,復雜度很大 。因此,我們先對問題進行分析 。在下面的討論中,我們把C的任一C-獨立點集={ai1,j1,…,ais,js},記作=ai1,j1…ais,js,i1 … is 。于是可看作陣C中以1為節點的一條路,滿足:對路中的任意兩節點,均有某一節點位于另一節點的右下方 。稱這種路為右下行路 。于是求C-獨立點集等價于求陣C的右下行路 。這種求右下行路的搜索可以逐行往下進行 。命題1. 若 =αai,jβ和ψ=α'ai,jσ為C的兩個C-獨立點集,且α為α'的加細,則存在C-獨立點集'=αai,jδ,滿足≥ 。命題2. 若 =αai,jβ和ψ=α'ai+k,jσ為C的兩個C-獨立點集,且≥,則存在C-獨立點集'=αai,jδ,滿足≥ 。命題3. 若 =αai,jβ和ψ=α'ai,j+kσ為C的兩個C-獨立點集,且≥,則存在C-獨立點集'=αai,jδ,滿足≥ 。由命題1知,在搜索右下行路的過程中,如果已獲得了某一C-獨立點集的某一初始截段αai,j和另一C-獨立點集ψ的某一初始截段α'ai,j,且有≤,則我們可以停止對ψ的進一步搜索 。由命題2知,在搜索右下行路的過程中,在某一列j存在某兩個C-獨立點集的某初始截段=ai1,j1…ais,j和ψ=al1,m1…alt,j,如果≥,但ltis,則我們可以停止對ψ的進一步搜索 。由命題3知,在搜索右下行路的過程中,在某一行i存在某兩個C-獨立點集的某初始截段=ai1,j1…ai,js和ψ=ai1,m1…ai,mt,如果≥,但mtjs,則我們可以停止對ψ的進一步搜索 。由此可見,并不要求搜索所有C的最大C-獨立點集,而可以采用比這簡單得多的方法進行計算 。那么按照我們上面的三個命題,來看如下實例: 首先我們得到=B(在上的節點用①表示),我們向右下方找路,可以發現,在第4列有兩個1,根據命題2,我們選擇上面的一個1,也就是說選擇第1行的那個1,而不要第2行的那個1 。同時我們也發現在第1行也有兩個1,由命題3知,我們選擇左邊的那個1,即第4列的那個1 。此時=BO 。但是當我們的算法運行到第4行時,=BOOK,由于K在第3行第6列,而本行的1在第1列,在路最后一個節點K的左邊,那么我們必須新建一條路ψ,因為我們并不能確定是否以后就有≥,當算法運行到第6行時,=BOOK,ψ=NEW,=4,=3,我們將S鏈到路上,此時我們得到最長右下行路=BOOKS,=5 。這樣我們就可以計算出這兩個字符串的匹配程度 。在我們的算法設計過程中,用到了兩個技巧 。技巧之一,矩陣C不用存儲,是動態建立的,節省了空間 。技巧之二,本算法并不要求所有的S與T中所有的元素都相互進行比較,也并不存儲所有的右下行路,節省了時間和空間 。由矩陣中1的出現情況可見,本算法所需的空間和時間都遠小于O(mn)
編輯本段結束語
本文給出了一個與模式匹配不同的,具有若干應用的,串的最大匹配算法,該算法已經在機器上實現,達到了預期的效果 。本文僅討論權值恒為1的情況,對于權值任意的情形不難由此得到推廣 。
編輯本段C語言代碼(C Code)
#includestdio.h #includestring.h void getnext(int next[],char s[],int l) { int i=1,j=0; next[1]=0; while(il) { if(j==0 || s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; } } int KMP(char s1[],char s2[],int l1,int l2,int next[]) { int i,j; i=j=1; while(i=l1j=l2) { if(j==0||s1[i]==s2[j]) { i++;j++; } else j=next[j]; } if(jl2) return(i-l2); return 0; } int main() { int next[10001],ans; char s1[10001],s2[10001],l1,l2; scanf("%s",s1+1); scanf("%s",s2+1); l1=strlen(s1+1); l2=strlen(s2+1); getnext(next,s2,l2); ans=KMP(s1,s2,l1,l2,next); if(ans!=0) printf("%d\n",ans); else printf("No!\n"); system("pause"); return 0; }
編輯本段KMP算法的pascal實現
var next:array [1 ..1000001] of longint; s,t:ansistring; procedure get_next(t:ansistring); var j,k:integer; begin j:=1; k:=0; while jlength(t) do begin if (k=0) or (t[j]=t[k]) then begin inc(j); inc(k); next[j]:=k; end else k:=next[k]; end; end; function index(s:ansistring;t:ansistring):longint; var i,j:longint; begin get_next(t); index:=0; i:=1; j:=1; while (i=length(s))and(j=length(t)) do begin if (j=0)or(s[i]=t[j]) then begin inc(i); inc(j); end else j:=next[j]; if jlength(t) then index:=i-length(t); end; end; begin readln(s); readln(t); writeln(index(s,t)) end.
編輯本段KMP播放器
K-multimedia player的縮寫
來自韓國的影音全能播放器,與Mplayer一樣從linux平臺移植而來的Kmplayer(簡稱KMP)幾乎可以播放您系統上所有的影音文件 。通過各種插件擴展KMP可以支持層出不窮的新格式 。強大的插件功能,直接從Winamp繼承的插件功能,能夠直接使用winamp的音頻 ,輸入,視覺效果插件,而通過獨有的擴展能力,只要你喜歡,可以選擇使用不同解碼器對各種格式進行解碼 。KMPlayer The Professional Media Player! 它支持 Winamp 2/5 的輸入、常規、DSP、視覺效果、媒體庫插件 。無須注冊表支持直接調用 Directshow 濾鏡!FFdshow 的視覺特效系統~超強的 GUI 界面~安裝電視卡后可以直接代替原軟件直接收看電視~支持播放 DVD/VCD 以及絕大多數電腦的媒體文件(AVI 支持 Xvid/DivX/3vid/H264 OGG/OGM/MKV 容器/AC3/DTS 解碼~Monkey Audio 解碼~)強烈推薦!此播放器除了會將自己的配置信息寫入注冊表外絕對綠色~ KMplayer內置目前常見的所有解碼器,包括real,QT等 。另外KMplayer安裝版也是目前很少見的檢查流氓軟件的安裝方式,如果一旦有惡意的漢化小組漢化并捆綁了流氓軟件 。該安裝程序自動會識別,并作出提示,建議用戶不要安裝,雖然不是特別準確,但KMplayer的無廣告及第三方插件的特點使其深受好評 。目前韓國官方已經在Kmplayer里自帶了中文字庫,只要用戶是中文系統,軟件就會自動識別,十分方便 。KMP版本: KMPlayer3.0.0.1439
日本NAOMI是不是改名字了沒有 。日本NAOM是一位網球運動員,中文名字叫做大阪直美,大坂直美是一位很有進攻能力的球員,發球也非常出色 。2022年5月23日,在法國網球公開賽女單首輪中,大坂直美以5-7、4-6不敵阿曼達阿尼西莫娃,截止到2022年7月15日,NAOM并沒有改名字 。
跪求別叫我兒子2016年上映的由Naomi Nero主演的在線免費播放資源鏈接:
提取碼: afh8
《別叫我兒子 M?e só há uma(2016)》
導演: 安娜·穆拉爾特
編劇: 安娜·穆拉爾特
主演: Naomi Nero、Daniel Botelho、Daniela Nefussi
類型: 劇情、同性
制片國家/地區: 巴西
語言: 葡萄牙語
上映日期: 2016-02-12(柏林電影節)
片長: 82分鐘
又名: Don't Call Me Son
他的人生被偷走兩次,一次剛出生,一次十七歲 。
皮耶和妹妹由單親媽媽獨力扶養,生活雖不富有,卻是一家和樂 。突然有一天,“媽媽”被警察帶走,這才知道她其實是當年從醫院抱走他的小偷,真正的父母找了他十七年 。皮耶正處于探索身體與認同的年紀,親熱對象不分男女,私下還會偷偷端詳鏡子里口紅眼影、性感女裝的妖冶自我 。敏感躁動、排斥定型的壓抑心靈,如何面對晴天霹靂般的身世巨變,以及親生父母對“兒子”的殷切關愛與期待?
- win10怎么傳輸整個文件夾 win10如何發送文件夾
- win10怎么下載爐石 win10怎么下載爐石傳說
- 兒童電腦怎么設置win10 電腦如何設置兒童模式win10
- win10全屏顯示怎么設置 window10怎么設置全屏
- win10軟件安裝通知怎么關 win10關閉軟件通知
- 管家婆兼容win10怎么設置 管家婆軟件win 10可以用嗎
- win10的電腦辦公軟件怎么用 Win10辦公軟件
- win10怎么完全漢化 windows11怎么漢化
- win10赫茲頻率怎么調 win10如何調赫茲
- 聯想y700怎么升win10 聯想y700怎么升級win11
