1. 程式人生 > >算法進階

算法進階

最大的 心算 enume pos body 貪心 gpo 兩個 lis

貪心算法:

貪心算法之找零問題:
假設你是商店老板需要找零n元錢,錢幣的面額有:100元、50元、20元、5元、1元、,如何找零使得所需的錢幣數量最少?
代碼實現:

money = [100,50,20,5,1] #錢幣的面額大小


def change_money(x):
change = [0,0,0,0,0] #對應錢幣面額的個數
for i,m in enumerate(money):
change[i] = x // money[i]
x = x % money[i]
if x > 0:
print("還剩%s" % x)

return change


print(change_money(356.2))

 
習題:
1、有n個非負整數,將其按照字符串拼接的方式拼接為一個整數。請問:如何拼接可以使得得到的整數最大?
example: 12,34,56,78,9 =======> 拼接後的結果為987654321
2、有n個非負整數,將其按照字符串拼接的方式拼接為一個整數。如何拼接可以使得得到的整數最小?
思路和上邊類似,只是結果相反

動態規劃:

最長上升子序列:

最長上升子序列(LIS):給定一個序列X,求X長度最大的連續遞增的子序列。
x = [1,7,2,8,3,5,2]    ,LIS(x) = [1,2,3,5]

技術分享圖片

最長公共子序列:

最長公共子序列(LCS)問題:給定兩個序列X和Y,求X和Y長度最大的公共子序列。
X = "ABBCDEFG"  y = "SBBCEGR"   LCS(X,Y)="BBC"       不過圖還是沒看懂。。

技術分享圖片

最長公共子串:

最長公共子序列(LCSS)問題:給定兩個序列X和Y,求X和Y長度最大的公共子串。
X = "ABBCDE"  Y = "BBBCRT"    LCSS(X,Y) = "BBC"

編輯距離:

編輯距離:指兩個子串之間,有一個轉成另一個所需最少的編輯操作次數。
允許的編輯操作:替換、插入、刪除
  x = "
cofe" y = "coffee", 編輯距離為2(插入2次)   x = "coffee" y = "coffe", 編輯距離為1(刪除1次)   x = "coffee" y = "coffye" 編輯距離為2(替換2次)   x = "cofye" y = "coffee" 編輯距離為2 編輯距離可以用來表示兩個字符串的相似度,應用廣泛

就這麽點。。。都看不太懂。。。。

算法進階