選的B題
第一階段賽題下載:https://www.lanzous.com/i3vnsvg
建立了兩個模型,一個字典搜尋算法選擇模型,一個算法優化模型。
問題假設
- 1.假設文本隨機生成
- 2.假設構成文字的20個字母為a~t
- 3.假設替換錯誤只出現片段的首尾,因此我們搜尋的片段長度就為11~21之間
模型准備
- 使用C++隨機數引擎與分布類型生成文本,每段長度隨機5000~8000。
- 調整文本(隨機生成的文本找到11~21個字母相同的基本沒有)
選擇模型
- 使用了BF,動態規划,KMP三種方法,直接跑程序搜尋相同字符串,搜尋結果保存為txt文件,同時記錄運行時間,占用內存,資源使用量,初步比較效率。
- 選擇改變每段文本長度,再次記錄上面三個記錄,統計制表做附件,繪圖插論文,使用MATLAB擬合數據,得到方程式,繪制方程式相關三維圖像。
- 比較得出KMP為最優算法。
優化模型
- 優化KMP的next數組,字符不匹配時,next數組會出現character[i]=character[next[i-1]];的迭代查詢,使用next[i]=next[next[i-1]];歸並相同數據。
- 再次選擇第一個模型的測試文本,測試程序的運行時間與占用內存,與傳統KMP算法比較。
程序時間大概也就是100秒~200秒左右,占用內存好像是150MB~300MB左右。
方法很簡單,思路也比較清晰,但這道題難點在於模型和相關方程式的建立,這道題附件我們給的倒是挺多,附錄就給了核心代碼。
第一階段代碼下載:點擊下載