《演算法設計與分析》第九周作業

2021-08-30 22:05:26 字數 1002 閱讀 2771

標籤(空格分隔): 課堂作業

姓名:李**

學號:16340114

題目:edit distance(

給定兩個字串,每次可以對增加、刪除、替換乙個字元。問最少多少次操作後,兩個字串變得一樣。

這個問題書本裡有將過。思路就是將當前問題化解為若干個子問題去解決,取子問題中的最有解。子問題的情況有三:

[設i為字串1的長度,j為字串2的長度]

(i)string1的前(i-1)個字元與string2經過一定操作後可以變得一樣,此時只需刪掉string1的第i個字元

(ii)string2的前(j-1)個字元與string1經過一定操作後可以變得一樣,此時只需刪掉string2的第j個字元

(iii)string1的前(i-1)個字元與string2的前(j-1)個字元經過一定操作後可以變得一樣,此時判斷string1的第i個字元與string2的第j個字元是否相同,若不相同即進行替換操作,相同即不進行任何操作

這樣,得到了狀態轉換方程(引自書本algorithms(dasgupta)):

先初始化乙個字串為空,另乙個字串有字元的情況

再根據狀態遷移方程程式設計即可(引自書本algorithms(dasgupta)):

需要注意,diff中的i, j是指第幾個元素,實現時需要轉換成字串下標,減去一即可。

重新複習了一遍書中的例子,並親手程式設計之後,可算是有一點點領悟到動態規劃的內涵了。動態規劃的主要思想就是把當前的問題化解為乙個或多個類似的子問題,就像領導布置工作給下屬,下屬又繼續把工作分配給下屬的下屬,如此往復,當最下層的工作完成了,就逐層往上匯報,最後領導就得到乙個完整的工作結果了。雖然比喻得可能不是很恰當,但大概也就是這個意思了吧。

class solution 

int min(int a, int b, int c)

};

演算法設計與分析 第九周 編輯距離

4.執行結果 5.源 本週學習了動態規劃,講到了編輯距離的演算法。恰好看到了leetcode上有這樣的題目,因此選擇了這道題,就當作鞏固知識了!動態規劃的經典問題,既有思路。首先考慮兩個單詞每個字元的匹配情況 ap ple0 apol ogy appl e012 345a 1p2o 3l4o 5g6...

第九周作業

1 編寫指令碼,接受二個位置引數,magedu和 www,判斷系統是否有magedu,如果沒有則自動建立magedu使用者,並自動設定家目錄為 www vim create user.sh bin bash if ne 2 then echo 0 username directory exit 1 ...

第九周作業

cat data canshu.sh bin bash user 1 dir 2if 2 then echo 請輸入兩個引數 exit else id dev null if 0 then mkdir dev null useradd d dev null echo 使用者 建立成功 else ec...