#include/***
對於序列s和
t,它們之間距離定義為
:對二者其一進行幾次以下的操作
* (1)
刪去乙個字元;
(2)插入乙個字元;
(3)改變乙個字元。每進行一次操作,計數增加1。
* 將s和
t變為同乙個字串的最小計數即為它們的距離。給出相應演算法。
*/#define
min(x,y) (x#define
inf
50000
#define
sl 7
//字串
s的有效長度
#define
tl 5
//字串
t的有效長度
static chars[sl+2] = " acbdepo"
;static chart[tl+2] = " abcde"
;/**
* 我的思路如下
* 設子問題為
:請求出字串s的前
i個字元組成的字串與字串t前
j個字元組成的字串
* 每次對其一進行以下其中一項操作
: (1)
刪去乙個字元;
(2)插入乙個字元;
(3)改變乙個字元。
* 每次操作後運算元
+1,最終使兩個字串相等
,求最小的運算元
minsum
* 找出邊界:顯然
i=0時
,minsum=j,
因為i=0時,
所需要的就是連續插入
j次對應字串
t的字元,*
同理j=0
時也一樣
*///
遞迴intsolve_1(inti,
intj)
//遞迴
+記憶陣列的
dpstatic intmemo[sl+1][tl+1];
intsolve_2(inti,
intj)
//遞推
static intdp[sl+1][tl+1];
intsolve_3()
for(intj = 0
; j <= tl
; ++j)
for(inti = 1
; i <= sl
; ++i) }}
returndp[sl][tl];
}intmain()
}printf("solve_2:
%d\n
", solve_2(sl
, tl));
// for (int i = 0; i <= sl; ++i)
// printf("\n");
// }
printf("solve_3:
%d\n
", solve_3());
return0
;}
執行結果:
solve_1:4
solve_2:4
solve_3:4
動態規劃之字串最短編輯距離
題目描述給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式第一行包含整數n,表示字串a的長度。第二行包含乙個長度為...
動態規劃 計算字串編輯距離
題目 設a 和b 是2 個字串。要用最少的字元操作將字串a 轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b 所用的最少字元運算元稱為字串a到b 的編輯距離,記為d a,b 試設計乙個有效演算法,對任給的2 個字串a和b,計...
動態規劃 線性 DP 字串編輯距離
字串編輯距離,即 levenshtein 距離,是 科學家 vladimir levenshtein 提出的概念,是指從乙個字串修改到另乙個字串時,編輯單個字元所需的最少次數,編輯單個字元允許的操作有 替換 插入 刪除。levenshtein 距離一般用來衡量兩個字串的相似度,一般來說,兩個字串的編...