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

Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法

 更新時間:2017年09月08日 11:16:09   作者:羅兵  
這篇文章主要介紹了Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法,簡單描述了最長公共子序列問題并結(jié)合實例形式分析了Python基于回溯法子集樹模板獲取最長公共子序列的操作步驟與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法。分享給大家供大家參考,具體如下:

問題

輸入

第1行:字符串A
第2行:字符串B
(A,B的長度 <= 1000)

輸出

輸出最長的子序列,如果有多個,隨意輸出1個。

輸入示例

belong
cnblogs

輸出示例

blog

分析

既然打算套用回溯法子集樹模板,那就要祭出元素-狀態(tài)空間分析大法。

以長度較小的字符串中的字符作為元素,以長度較大的字符串中的字符作為狀態(tài)空間,對每一個元素,遍歷它的狀態(tài)空間,其它的事情交給剪枝函數(shù)?。。?/p>

解x的長度不固定,xi表示字符串b中的序號。

在處理每一個元素時,如果沒有一個狀態(tài)被選擇(cnblogs中沒一個字符被選?。敲闯绦驘o法去往下一個元素。

這確實是個不小的麻煩?。?!思考了一天,終于想出辦法了:擴充狀態(tài)空間,增加一個狀態(tài)q!如果元素選取了狀態(tài)q,它是合法的。但是,狀態(tài)q不加入解x內(nèi)?。?!

看一個直觀的圖:

至此,enjoy it!

代碼

'''最長公共子序列'''
# 作者:hhh5460
# 時間:2017年6月3日
a = 'belong'
b = 'cnblogs'
x = []  # 一個解(長度不固定)xi是b中字符的序號
X = []  # 一組解
best_x = [] # 最佳解
best_len = 0 # 最大子序列長度
# 沖突檢測
def conflict(k):
  global n, x, X, a,b,best_len
  # 如果兩個字符不相等
  if x[-1] < len(b) and a[k] != b[x[-1]]:
    return True
  # 如果兩個字符相等,但是相對于前一個在b中的位置靠前
  if a[k] == b[x[-1]] and (len(x) >= 2 and x[-1] <= x[-2]):
    return True
  # 如果部分解的長度加上后面a剩下的長度,小于等于best_len
  if len(x) + (len(a)-k) < best_len:
    return True
  return False # 無沖突
# 回溯法(遞歸版本)
def LCS(k): # 到達(dá)a中的第k個元素
  global x, X,a,b,best_len,best_x
  #print(k, x)
  if k == len(a): # 超出最尾的元素
    if len(x) > best_len:
      best_len = len(x)
      best_x = x[:]
  else:
    for i in range(len(b)+1): # 遍歷 狀態(tài)空間:0~len(b)-1,技巧:人為增加一種狀態(tài)len(b),表示改行沒有元素選取
      if i==len(b): # 此狀態(tài)不放入解x內(nèi)
        LCS(k+1)
      else:
        x.append(i)
        if not conflict(k): # 剪枝
          LCS(k+1)
        x.pop()       # 回溯
# 根據(jù)一個解x,構(gòu)造最長子序列l(wèi)cs
def get_lcs(x):
  global b
  return ''.join([b[i] for i in x])
# 測試
LCS(0)
print(b)
print(best_x)
print(get_lcs(best_x))

效果圖

 

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python Faker批量生成測試數(shù)據(jù)的實現(xiàn)

    Python Faker批量生成測試數(shù)據(jù)的實現(xiàn)

    本文主要介紹了Python Faker批量生成測試數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 如何基于Django實現(xiàn)上下文章跳轉(zhuǎn)

    如何基于Django實現(xiàn)上下文章跳轉(zhuǎn)

    這篇文章主要介紹了如何基于Django實現(xiàn)上下文章跳轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • flask框架實現(xiàn)修改密碼和免密登錄功能

    flask框架實現(xiàn)修改密碼和免密登錄功能

    flask是python web開發(fā)的常用框架之一。本文將講述flask如何實現(xiàn)修改密碼和免密登錄功能
    2021-05-05
  • Python中zip()函數(shù)用法實例教程

    Python中zip()函數(shù)用法實例教程

    這篇文章主要介紹了Python中zip()函數(shù)用法實例教程,對Python初學(xué)者有一定的借鑒價值,需要的朋友可以參考下
    2014-07-07
  • python實現(xiàn)跨excel的工作表sheet之間的復(fù)制方法

    python實現(xiàn)跨excel的工作表sheet之間的復(fù)制方法

    今天小編就為大家分享一篇python實現(xiàn)跨excel的工作表sheet之間的復(fù)制方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • VSCode設(shè)置類似Pycharm控制臺運行Python顯示中間變量的步驟

    VSCode設(shè)置類似Pycharm控制臺運行Python顯示中間變量的步驟

    這篇文章主要介紹了如何在VSCode中設(shè)置調(diào)試功能,以實現(xiàn)類似于Pycharm在控制臺輸出中間變量的功能,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • Python進(jìn)行特征提取的示例代碼

    Python進(jìn)行特征提取的示例代碼

    這篇文章主要介紹了Python進(jìn)行特征提取的示例代碼,幫助大家更好的進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2020-10-10
  • 詳細(xì)聊一聊為什么Python沒有main函數(shù)

    詳細(xì)聊一聊為什么Python沒有main函數(shù)

    相信很多初學(xué)python的人看代碼的時候都會先找一下main()方法,從main往下看,但事實上python中是沒有你理解中的“main()”方法的,下面這篇文章主要給大家介紹了關(guān)于為什么Python沒有main函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Python pymongo模塊常用操作分析

    Python pymongo模塊常用操作分析

    這篇文章主要介紹了Python pymongo模塊常用操作,結(jié)合實例形式分析了pymongo模塊的導(dǎo)入、連接MongoDB數(shù)據(jù)以及插入、更新、刪除、查詢等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-09-09
  • Python中的__SLOTS__屬性使用示例

    Python中的__SLOTS__屬性使用示例

    這篇文章主要介紹了Python中的__SLOTS__屬性使用示例,本文直接給出代碼示例,需要的朋友可以參考下
    2015-02-02

最新評論

尚义县| 乐安县| 泸溪县| 鄢陵县| 石河子市| 福鼎市| 农安县| 呼图壁县| 宝丰县| 胶州市| 闽清县| 兰溪市| 剑阁县| 孟连| 曲松县| 监利县| 攀枝花市| 东明县| 本溪市| 于田县| 和林格尔县| 山阴县| 陆河县| 汝州市| 凤翔县| 桂东县| 渑池县| 宁强县| 榆树市| 临颍县| 麟游县| 垣曲县| 墨竹工卡县| 玛曲县| 西华县| 海宁市| 韶关市| 陇川县| 漳平市| 滕州市| 焦作市|