動態規劃 編輯距離

2021-09-25 06:31:06 字數 1123 閱讀 3650

將乙個字串變為另乙個字串最小操作次數,您對單詞允許以下3種操作:

a)插入字元

b)刪除字元

c)替換字元

例如 a = 『horse』 變成 b = 『ros』

想法:

# -*- coding:utf-8 -*-

def char_array_replace(array1, array2):

row = len(array1)

col = len(array2)

if row*col == 0:

return row+col

d = [[0]*(col+1) for _ in range(row+1)]

print d

#首先考慮極端情況

# array2是空字串,要對array1進行全部刪除操作

for i in range(row+1):

d[i][0] = i

# array1是空字串,要根據array2進行全部插入操作

for j in range(col+1):

d[0][j] = j

# 如果是從前一步變過來的的,說明前一步之前的序列已經一致

# 注意,不是從0 開始

for i in range(1,row+1):

for j in range(1,col+1):

if array1[i-1] == array2[j-1]:

d[i][j] = d[i-1][j-1]

else:

delete = d[i-1][j] + 1

replace = d[i-1][j-1] + 1

insert = d[i][j-1]+1

d[i][j] = min(delete, replace, insert)

print d[i-1][j-1]

def main():

char_array_replace('horse','ros')

if __name__ == "__main__":

main()

動態規劃 編輯距離

1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...

動態規劃 編輯距離

給定兩個序列x和y,求從乙個序列到另乙個序列所需變換的最小次數,這裡的變換包括刪除,新增和替換,每次只對乙個元素進行操作。演算法序言 這個題目有點像之前寫的最長公共子串行問題,也是用動態規劃的演算法。能夠應用動態規劃的題目有乙個特點就是具有最優子結構,就是整個問題的最優解會包含子問題的最優解,那麼我...

動態規劃 編輯距離

求解編輯距離問題 一.演算法設計 這是一道經典的動態規劃問題,兩個字串的對齊方式很多,如果要將所有的對齊方式都考慮一遍,演算法的效率將十分低下。分解子問題的辦法是看兩個字串的字首,現令e i,j 表示字串x與字串y的相應字首的編輯距離,則e n,m 就是所求的答案。對於三種編輯操作的變化,對於e i...