算法進階
阿新 • • 發佈:2018-02-02
最大的 心算 enume pos body 貪心 gpo 兩個 lis return change
貪心算法:
貪心算法之找零問題:
假設你是商店老板需要找零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)
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 編輯距離可以用來表示兩個字符串的相似度,應用廣泛
就這麽點。。。都看不太懂。。。。
算法進階