剛開始第二階段了吧,因為一些事情沒去參加第二階段。這裡就給大家提供一些思路吧。
這道題看著像是在第一階段上的深入,實際上方法都一樣的。我們先分析一遍**吧。
ok,後面的我們提取一下要求:
片段長度15
錯誤發生概率1/5
插入,替換,刪失
每個錯誤只涉及乙個字元
敲黑板了,「造」資料,先造出符合上面第乙個要求的片段,發生次數和片段個數自己控制好。接著,讓第三個要求的概率為1/5左右,涉及乙個字元。這裡,我們結果就出來了。
首先每個字元的錯誤為1/5左右,那麼長度為15的片段,每個錯誤出現的長度為3左右。我們可以將錯誤分成插入錯誤,替換錯誤,刪失錯誤分別進行處理,再進行對比,找出的相同字串就是我們需要的字串。
在進行對比時,我們可以引入乙個「標記m」,記錄兩個字元片段進行對比時。當字元不同時,m++,下乙個在不同m++,在此期間,我們需要進行判斷m是否大於我們設定的乙個數n(3左右),可以稱為容錯數n,若大於,我們進行下乙個字串比較,若小於繼續進行這個字串下乙個字元的比較,當字元再次相同時,m=0重新記錄。
至於下面說的,不知道長度怎麼辦?那長度未知,首先我們要進行分析,盡量的縮短長度的範圍,再者對演算法的遍歷方法進行改進,具體方法是使用某個演算法,自己選擇,減少遍歷次數,你們組的程式設計肯定知道的。
找到幾種演算法,進行分析+比較搜尋效率,找到當前最優演算法
在對於三種錯誤進行篩選時,我們需要對每種錯誤進行調整,使得我們的結果更加準確,假設下面的錯誤都發生在子串當中。我舉例錯誤只舉了一次錯誤,實際不止,方法相同。
這時候,子串和預期答案,必定少了乙個,當我們進行字元對比時,遇到刪失錯誤的位置,我們的子串比較字元位置不變,母串比較字元向後移動一位,再進行對比,且m++,因為子串少了一位,所以子串最後一位實際沒有參加對比,這一位的不同我們不計入m。
發生這種錯誤時,子串和母串的長度是不變的,因此我們只需要記錄標記m,進行判斷就行。
這種錯誤相當於,子串多了一位,這時候,在遇到發生插入錯位位置的時候,我們將子串比較字元向後移動一位,m++。這種錯誤,以子串為主,相當於子串少了一位,因此我們可以將母串的最後一位arr[i]和子串的brr[i+1],子串相當於增加了一位進行比較,需要計入m。
把這個問題分成三個部分解決,每個「錯誤」篩選出的片段,總的實際上就是我們所需要的片段。也就是,已知三個集合,求這三個集合的並集,但這中間肯定存在誤差,搜尋的字串比我們實際的要多,這個問題可以放到優化模型中提出。
實際上我們需要優化的地方就是,我們在分別篩選時,篩選的字串肯定比實際的多,就算比較之後選出相同的,實際篩選出的也會多,這裡優化的就是提高我們三種方法搜尋準確率或者對比時如何處理。在這裡如果會的話,可以加入乙個篩選的模型。
注意:如果大家寫不出**,那就一定流程圖寫好,寫清楚,演算法別搞花裡胡哨,能解決問題就行。
後面有補充的話,我都會放到這篇部落格上。
2019/5/18 14:17 更新幾種錯誤的處理方法和第二問的未知長度的方法等
2019/5/18 17:17 更新了三種錯誤解決後的處理方法。(在明天會給大家說一些這篇**中應該著重注意的地方,大家注意關注。)
覺得部落格有幫助的朋友可以給博主點個贊,對建模感興趣的朋友可以關注一下博主,你們的支援就是我最大的動力!
2019第十二屆「認證杯」數學建模(第一階段)
選的b題 建立了兩個模型,乙個字典搜尋演算法選擇模型,乙個演算法優化模型。使用c 隨機數引擎與分布型別生成文字,每段長度隨機5000 8000。調整文字 隨機生成的文字找到11 21個字母相同的基本沒有 使用了bf,動態規劃,kmp三種方法,直接跑程式搜尋相同字串,搜尋結果儲存為txt檔案,同時記錄...
第十二屆CSP總結
第二次參加csp 前一次csp還是去年年初 從通知到準備也就乙個禮拜準備,大概看了一下往年的題型 第一題 水題 第二題 一般都是考點邏輯各種if else巢狀 然後加點排序 今年卡了我的是乙個結構體排序 好久沒做了果然有點生疏啊 附上一段 include include include includ...
第十二屆CSP總結
第二次參加csp 前一次csp還是去年年初 從通知到準備也就乙個禮拜準備,大概看了一下往年的題型 第一題 水題 第二題 一般都是考點邏輯各種if else巢狀 然後加點排序 今年卡了我的是乙個結構體排序 好久沒做了果然有點生疏啊 附上一段 include include include includ...