剛開始第二階段了吧,因為一些事情沒去參加第二階段。這里就給大家提供一些思路吧。
這道題看着像是在第一階段上的深入,實際上方法都一樣的。我們先分析一遍論文吧。
論文分析
首先第一句話的文本獲取,不用多說,編程直接和第一階段一樣,隨機生成(C/C++,MATLAB等等百度隨機數生成,個人用的分布引擎,然后寫入文檔,30段隨機文本就生成了)。
OK,后面的我們提取一下要求:
- 片段長度15
- 錯誤發生概率1/5
- 插入,替換,刪失
- 每個錯誤只涉及一個字符
敲黑板了,“造”數據,先造出符合上面第一個要求的片段,發生次數和片段個數自己控制好。接着,讓第三個要求的概率為1/5左右,涉及一個字符。這里,我們結果就出來了。
首先每個字符的錯誤為1/5左右,那么長度為15的片段,每個錯誤出現的長度為3左右。我們可以將錯誤分成插入錯誤,替換錯誤,刪失錯誤分別進行處理,再進行對比,找出的相同字符串就是我們需要的字符串。
在進行對比時,我們可以引入一個“標記m”,記錄兩個字符片段進行對比時。當字符不同時,m++,下一個在不同m++,在此期間,我們需要進行判斷m是否大於我們設定的一個數n(3左右),可以稱為容錯數n,若大於,我們進行下一個字符串比較,若小於繼續進行這個字符串下一個字符的比較,當字符再次相同時,m=0重新記錄。
至於下面說的,不知道長度怎么辦?那長度未知,首先我們要進行分析,盡量的縮短長度的范圍,再者對算法的遍歷方法進行改進,具體方法是使用某個算法,自己選擇,減少遍歷次數,你們組的編程肯定知道的。
模型介紹
第一個模型(算法模型)
找到幾種算法,進行分析+比較搜索效率,找到當前最優算法
在對於三種錯誤進行篩選時,我們需要對每種錯誤進行調整,使得我們的結果更加准確,假設下面的錯誤都發生在子串當中。我舉例錯誤只舉了一次錯誤,實際不止,方法相同。
1.刪失錯誤
這時候,子串和預期答案,必定少了一個,當我們進行字符對比時,遇到刪失錯誤的位置,我們的子串比較字符位置不變,母串比較字符向后移動一位,再進行對比,且m++,因為子串少了一位,所以子串最后一位實際沒有參加對比,這一位的不同我們不計入m。
2.替換錯誤
發生這種錯誤時,子串和母串的長度是不變的,因此我們只需要記錄標記m,進行判斷就行。
3.插入錯誤
這種錯誤相當於,子串多了一位,這時候,在遇到發生插入錯位位置的時候,我們將子串比較字符向后移動一位,m++。這種錯誤,以子串為主,相當於子串少了一位,因此我們可以將母串的最后一位arr[i]和子串的brr[i+1],子串相當於增加了一位進行比較,需要計入m。
把這個問題分成三個部分解決,每個“錯誤”篩選出的片段,總的實際上就是我們所需要的片段。也就是,已知三個集合,求這三個集合的並集,但這中間肯定存在誤差,搜索的字符串比我們實際的要多,這個問題可以放到優化模型中提出。
第二個模型(優化模型)
實際上我們需要優化的地方就是,我們在分別篩選時,篩選的字符串肯定比實際的多,就算比較之后選出相同的,實際篩選出的也會多,這里優化的就是提高我們三種方法搜索准確率或者對比時如何處理。在這里如果會的話,可以加入一個篩選的模型。
注意:如果大家寫不出代碼,那就一定流程圖寫好,寫清楚,算法別搞花里胡哨,能解決問題就行。
至於具體如何填充論文,還有代碼,就要靠各位自己加油了。有問題的話評論留言,這幾天我都會看。
后面有補充的話,我都會放到這篇博客上。
2019/5/18 14:17 更新幾種錯誤的處理方法和第二問的未知長度的方法等
2019/5/18 17:17 更新了三種錯誤解決后的處理方法。(在明天會給大家說一些這篇論文中應該着重注意的地方,大家注意關注。)
覺得博客有幫助的朋友可以給博主點個贊,對建模感興趣的朋友可以關注一下博主,你們的支持就是我最大的動力!