
算法学习
言珂
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用递归进行插入排序
算法导论习题2.3-4 # -*- coding: utf-8 -*- def linearsort(l, n): if n > 1: linearsort(l, n-1) insert(l, n) def insert(l, n): an = l.pop(n-1) for y in range(0, n-1): if a原创 2016-07-12 11:29:31 · 859 阅读 · 0 评论 -
使用python实现Strassen矩阵乘法算法
先将矩阵打包成一个类,重载加法和减法运算,就可以很简单地实现了,目前这个程序中还有一些冗余的地方,比如将行数和列数分别讨论,其实可以归为一个矩阵size。类的定义感觉需要改进,不过懒得做下去了 # -*- coding: utf-8 -*- def matrixproduct(a, b): def matrixproductmask(mat_a, mat_b): if m原创 2016-08-17 11:38:01 · 2903 阅读 · 0 评论 -
开始学习算法导论
将书中算法用C++还原一遍,慢慢学习 首先是Merge-sort算法原创 2016-07-07 16:12:46 · 296 阅读 · 0 评论 -
再次mergesort
虽说python写程序可以非常简洁,但是初学python写一个归并排序还是一股子c味 # -*- coding: utf-8 -*- def mergesort(l, p, r): if p < r: q = (p+r)/2 mergesort(l, p, q) mergesort(l, q+1, r) merge(l, p原创 2016-07-08 17:59:56 · 356 阅读 · 0 评论 -
归并排序使用在c++STL实现
相比上一个C++归并排序的版本,这次复习了一下STL的基本方法 因为要使用随机访问迭代器,所以序列使用了vector容器,而要使用lis容器t的merge算法,因此在合并时使用了list容器和vector容器之间相互转换 不过让我疑惑的是,似乎VS2013上迭代器不能重载[]运算符? #include #include #include #include template void Mer原创 2016-07-07 21:36:02 · 4099 阅读 · 0 评论 -
归并-插入混合排序算法
这里列出了插入排序,归并排序,以及归并-插入混合排序的算法并测试了三种排序在最坏情况下的运算速度比较。结果表明归并-插入混合排序是优于前两者的。但是混合排序在选择切换临界值时,并不是简单比较在前两种算法在不同序列长度下的快慢,因为归并排序在临界值附近过分割,反而会降低效率。不过我也没找到更好的方法 # -*- coding: utf-8 -*- def mergesort(l, p, r):原创 2016-07-15 15:24:29 · 1758 阅读 · 1 评论 -
算法导论习题2-4 Inversions 逆序数
简单地改一下归并排序即可 # -*- coding: utf-8 -*- def inversioncountmask(l): l1 = l[:] return inversionscount(l1, 0, len(l1)-1) def inversionscount(l, p, r): if p < r: q = (p+r)/2 re原创 2016-07-25 19:17:58 · 802 阅读 · 0 评论 -
算法导论2.3-7习题
先使用归并排序进行排序,再建立其补集,对这两个排序后的集合进行元素比较,找到相同元素即寻找到答案 def findthecomplementary(s, x): l1 = list(s) l2 = [] n = len(l1) mergesort(l1, 0, n-1) for a in reversed(l1): if (x - a) !原创 2016-07-13 19:42:07 · 419 阅读 · 0 评论 -
使用循环和递归方法实现二分法搜索
对于已排序的序列,实现二分法搜索算法,有循环和递归两种策略。 对于这种算法,中心点一直是一个开区间,因此下一次搜索时新区间应该相应的+-1,从而最终start>end # -*- coding: utf-8 -*- def binarysearch1(l, item): start = 0 end = len(l) - 1 while start <= end:原创 2016-07-13 17:55:44 · 2345 阅读 · 0 评论 -
在一个数列中找出最大和的连续子列
算法分别是复杂度n^2的蛮力算法,复杂度为n*log(n)的递归算法,上述两者的混合算法,以及复杂度为n的递推算法。最后一个算法我找到的参考答案用了两个循环,而我的算法只使用了一个循环 # -*- coding: utf-8 -*- import time def findmaximumsubarraybrute(l): maximumsum = l[0] low = 0原创 2016-08-11 14:54:24 · 1308 阅读 · 0 评论