算法进阶

贪心算法:

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

就这么点。。。都看不太懂。。。。

 

posted @ 2018-02-02 20:38 前方、有光 阅读(...) 评论(...) 编辑 收藏