最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python最長公共子串和最長公共子序列的實現(xiàn)

 更新時間:2018年07月07日 14:34:46   作者:wateryouyo的博客  
這篇文章主要介紹了詳解Python最長公共子串和最長公共子序列的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最長公共子串(The Longest Common Substring)

LCS問題就是求兩個字符串最長公共子串的問題。解法就是用一個矩陣來記錄兩個字符串中所有位置的兩個字符之間的匹配情況,若是匹配則為1,否則為0。然后求出對角線最長的1的序列,其對應(yīng)的位置就是最長匹配子串的位置。

def find_lcsubstr(s1, s2): 
 m=[[0 for i in range(len(s2)+1)] for j in range(len(s1)+1)] #生成0矩陣,為方便后續(xù)計算,比字符串長度多了一列
 mmax=0  #最長匹配的長度
 p=0 #最長匹配對應(yīng)在s1中的最后一位
 for i in range(len(s1)):
 for j in range(len(s2)):
  if s1[i]==s2[j]:
  m[i+1][j+1]=m[i][j]+1
  if m[i+1][j+1]>mmax:
   mmax=m[i+1][j+1]
   p=i+1
 return s1[p-mmax:p],mmax  #返回最長子串及其長度
 
print find_lcsubstr('abcdfg','abdfg')

運行得到輸出:('dfg',3)

最長公共子序列 (The Longest Common Subsequence)

子串要求字符必須是連續(xù)的,但是子序列就不是這樣。最長公共子序列是一個十分實用的問題,它可以描述兩段文字之間的“相似度”,即它們的雷同程度,從而能夠用來辨別抄襲。對一段文字進行修改之后,計算改動前后文字的最長公共子序列,將除此子序列外的部分提取出來,這種方法判斷修改的部分,往往十分準確。
        解法就是用動態(tài)回歸的思想,一個矩陣記錄兩個字符串中匹配情況,若是匹配則為左上方的值加1,否則為左方和上方的最大值。一個矩陣記錄轉(zhuǎn)移方向,然后根據(jù)轉(zhuǎn)移方向,回溯找到最長子序列。

import numpy
def find_lcseque(s1, s2): 
 # 生成字符串長度加1的0矩陣,m用來保存對應(yīng)位置匹配的結(jié)果
 m = [ [ 0 for x in range(len(s2)+1) ] for y in range(len(s1)+1) ] 
 # d用來記錄轉(zhuǎn)移方向
 d = [ [ None for x in range(len(s2)+1) ] for y in range(len(s1)+1) ] 
 
 for p1 in range(len(s1)): 
 for p2 in range(len(s2)): 
  if s1[p1] == s2[p2]:      #字符匹配成功,則該位置的值為左上方的值加1
  m[p1+1][p2+1] = m[p1][p2]+1
  d[p1+1][p2+1] = 'ok'     
  elif m[p1+1][p2] > m[p1][p2+1]: #左值大于上值,則該位置的值為左值,并標記回溯時的方向
  m[p1+1][p2+1] = m[p1+1][p2] 
  d[p1+1][p2+1] = 'left'     
  else:              #上值大于左值,則該位置的值為上值,并標記方向up
  m[p1+1][p2+1] = m[p1][p2+1]  
  d[p1+1][p2+1] = 'up'     
 (p1, p2) = (len(s1), len(s2)) 
 print numpy.array(d)
 s = [] 
 while m[p1][p2]:  #不為None時
 c = d[p1][p2]
 if c == 'ok':  #匹配成功,插入該字符,并向左上角找下一個
  s.append(s1[p1-1])
  p1-=1
  p2-=1 
 if c =='left': #根據(jù)標記,向左找下一個
  p2 -= 1
 if c == 'up':  #根據(jù)標記,向上找下一個
  p1 -= 1
 s.reverse() 
 return ''.join(s) 
print find_lcseque('abdfg','abcdfg')

得到輸出結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何將numpy二維數(shù)組中的np.nan值替換為指定的值

    如何將numpy二維數(shù)組中的np.nan值替換為指定的值

    這篇文章主要介紹了將numpy二維數(shù)組中的np.nan值替換為指定的值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python中os.path.join函數(shù)的用法示例詳解

    Python中os.path.join函數(shù)的用法示例詳解

    這篇文章主要給大家介紹了關(guān)于Python中os.path.join函數(shù)用法的相關(guān)資料,os.path.join函數(shù)是Python標準庫中的一個函數(shù),用于將多個路徑組合成一個有效的路徑,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 十行代碼使用Python寫一個USB病毒

    十行代碼使用Python寫一個USB病毒

    本文給大家分享一個基于十行代碼使用Python寫一個USB病毒,很簡單,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • python編程控制Android手機操作技巧示例

    python編程控制Android手機操作技巧示例

    這篇文章主要為大家介紹了如何利用python編程來實現(xiàn)控制手機的操作技巧,文中含有各種操作的示例,有需要的朋友可以借鑒參考下
    2021-10-10
  • Ubuntu中配置TensorFlow使用環(huán)境的方法

    Ubuntu中配置TensorFlow使用環(huán)境的方法

    這篇文章主要介紹了Ubuntu中配置TensorFlow使用環(huán)境的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-04-04
  • 解決pycharm導(dǎo)入本地py文件時,模塊下方出現(xiàn)紅色波浪線的問題

    解決pycharm導(dǎo)入本地py文件時,模塊下方出現(xiàn)紅色波浪線的問題

    這篇文章主要介紹了解決pycharm導(dǎo)入本地py文件時,模塊下方出現(xiàn)紅色波浪線的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python報錯TypeError: tuple indices must be integers or slices, not str的問題分析及解決方法

    Python報錯TypeError: tuple indices must be

    在Python編程過程中,我們經(jīng)常會遇到各種各樣的報錯信息,其中,“TypeError: tuple indices must be integers or slices, not str”這個報錯,對于很多開發(fā)者來說,可能既熟悉又陌生,今天,我們就來深入探討一下這個報錯,看看它是如何產(chǎn)生的,以及如何快速有效地解決它
    2025-01-01
  • Python中的len()函數(shù)是什么意思

    Python中的len()函數(shù)是什么意思

    這篇文章主要介紹了Python中的len()函數(shù)是什么意思以及l(fā)en()函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • ?Python錯誤與異常處理

    ?Python錯誤與異常處理

    這篇文章主要介紹了?Python錯誤與異常處理,錯誤與異常處理在Python中具有非常重要的地位,熟練的使用錯誤與異常處理能夠為我們的Python編程提供很多的便利之處,希望您閱讀完本文后能夠有所收獲
    2022-01-01
  • Python運行出現(xiàn)DeprecationWarning的問題及解決

    Python運行出現(xiàn)DeprecationWarning的問題及解決

    這篇文章主要介紹了Python運行出現(xiàn)DeprecationWarning的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

屏山县| 天柱县| 兴山县| 鹿泉市| 漳浦县| 铜山县| 健康| 临江市| 新巴尔虎右旗| 宁夏| 铜鼓县| 晴隆县| 衡东县| 卢湾区| 宽城| 青铜峡市| 万宁市| 泰宁县| 精河县| 全南县| 纳雍县| 普兰店市| 澎湖县| 泰州市| 西昌市| 迁安市| 齐河县| 犍为县| 平罗县| 桦南县| 平邑县| 留坝县| 靖远县| 桑植县| 雅安市| 民丰县| 平泉县| 扎赉特旗| 江油市| 平塘县| 延庆县|