int violentmatch(char* s, char* p)
else
} //匹配成功,返回模式串p在文字串s中的位置,否則返回-1
if (j == plen)
return i - j; //當前位置不要+1
else
return -1;
}
knuth-morris-pratt 字串查詢演算法,簡稱為 「kmp演算法」,常用於在乙個文字串s內查詢乙個模式串p 的出現位置,這個演算法由donald knuth、vaughan pratt、james h. morris三人於2023年聯合發表,故取這3人的姓氏命名此演算法。
核心:kmp演算法的核心就是避免不必要的回溯,回溯問題由模式串決定,不是由目標(主)串決定!
前字尾和next陣列求法:
next為此元素之前的字首和字尾包含最大元素個數+1,第乙個元素預設0
字首:此元素前去掉結尾
字尾:此元素前去掉開頭
比較方法:同時從兩端開始比較直到不等(對稱比較)
注:next陣列在此基礎上+1
next陣列結果如下:
移位的個數用next代替k陣列進行求解,核心**:
下標代表i,next代表j(失配後可能繼續失配,不斷回溯直到0)
void get_next( string t, int *next )
else
}// 因為字首是固定的,字尾是相對的。
}
#include
typedef char* string;
void get_next( string t, int *next )
else
}else
}}// 返回子串t在主串s第pos個字元之後的位置
// 若不存在,則返回0
int index_kmp( string s, string t, int pos )
else
}if( j > t[0] )
else
}
通過遞推求得next 陣列:
void getnext(char* p,int next)
else
} }
優化過後的next 陣列求法:
//優化過後的next 陣列求法
void getnextval(char* p, int next)
else
} }
kmp搜尋演算法:
int kmpsearch(char* s, char* p)
else
} if (j == plen)
return i - j;
else
return -1;
}
詳細理解原 python 遺傳演算法精簡版
精簡版遺傳演算法,演算法中僅採用變異運算元而沒有使用交叉運算元,但是進化依然很有效 精簡版遺傳演算法,演算法中僅採用變異運算元而沒有使用交叉運算元,但是進化依然很有效 target list welcome to charset ascii lowercase parent choice chars...
猴王演算法精簡版 Python實現
乙個猴王演算法,網上所列太過繁瑣,問題很簡單描述如下,猴王演算法 一群猴子圍成一圈,從某乙隻開始數,數到m只剔除之,後面的接著從一開始數,數到m剔除之,依次類推,剩下的最後乙隻為猴王 因為剛學習了python,所以用她來編碼,很優秀的程式語言哦 usr bin python coding utf 8...
AsyncTask原理精簡版
asynctask有三個主要的方法 onpreexecute doinbackground string.params onpostexecute 建立asynctask物件需要重寫乙個類繼承asynctask,因為asynctask本身是抽象類 new asynctask execute para...