算法基
IT莫莫
这个作者很懒,什么都没留下…
展开
-
各种排序算法
1. 插入排序def insertsort(a): if len(a)==1: return a for i in range(1,len(a)): j=i-1 insert=a[i] while j>=0 and a[j]>insert: a[j+1]=a[j] ...原创 2018-11-07 13:19:03 · 188 阅读 · 0 评论 -
最长公共子序列
例:A=['A','B','C','B','D','A','B']B=['B','D','C','A','B','A']最长公共子序列是BCBA或BDAB,子序列可以不是连续的,相对顺序一样就可以。这是一道动态规划题,首先我们需要一个c[a+1][b+1]来记录状态,注意每一维需要比数组长1,为了保存当A,B为空时候的情况。然后我们从[0,0]开始按行填表。按如下公式进行填表...原创 2018-11-13 13:58:34 · 118 阅读 · 0 评论 -
动态规划-01背包问题
背包问题是很经典的动态规划问题,变种问题也很多,最基本的问题是01背包问题问题描述:有n 个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?i:物品 1 2 3 4 w:体积 2 3 4 5 v:价值 3 4 5 6 分析:01背包问题可以看做是物品的序列...原创 2018-11-14 13:01:12 · 212 阅读 · 0 评论 -
最长公共子串
子串与子序列的区别是子串是连续的,而子序列只要相对位置一致。可以看到,和子序列的状态转移方程不同,只有当x,y相等的时候才会+1,不相等的时候后面就没有必要比较了a='cabdec'b='cbdec'c=[[0 for i in range(len(b)+1)] for j in range(len(a)+1)]maxlen=0maxindex=-1for i in ran...原创 2018-11-15 10:02:01 · 111 阅读 · 0 评论 -
python append 与 拷贝
python中的赋值操作是赋值的索引,例如:a=[1,2,3]b=[]b.append(a)a.pop()print(b)#[[1, 2]]当a数组弹出一个元素后,b也会跟着改变。但是对a重新赋值会给a一个新的内存地址:a=[1,2,3]b=[]b.append(a)a=a[:len(a)-1]print(b)#[[1, 2, 3]]虽然对a的再次赋值是...原创 2019-07-08 11:47:24 · 574 阅读 · 0 评论