贪心算法:
贪心算法之找零问题:
假设你是商店老板需要找零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 编辑距离可以用来表示两个字符串的相似度,应用广泛
就这么点。。。都看不太懂。。。。