- 博客(10)
- 收藏
- 关注
原创 使用python实现Strassen矩阵乘法算法
先将矩阵打包成一个类,重载加法和减法运算,就可以很简单地实现了,目前这个程序中还有一些冗余的地方,比如将行数和列数分别讨论,其实可以归为一个矩阵size。类的定义感觉需要改进,不过懒得做下去了# -*- coding: utf-8 -*-def matrixproduct(a, b): def matrixproductmask(mat_a, mat_b): if m
2016-08-17 11:38:01
2878
原创 在一个数列中找出最大和的连续子列
算法分别是复杂度n^2的蛮力算法,复杂度为n*log(n)的递归算法,上述两者的混合算法,以及复杂度为n的递推算法。最后一个算法我找到的参考答案用了两个循环,而我的算法只使用了一个循环# -*- coding: utf-8 -*-import timedef findmaximumsubarraybrute(l): maximumsum = l[0] low = 0
2016-08-11 14:54:24
1292
原创 算法导论习题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
779
原创 归并-插入混合排序算法
这里列出了插入排序,归并排序,以及归并-插入混合排序的算法并测试了三种排序在最坏情况下的运算速度比较。结果表明归并-插入混合排序是优于前两者的。但是混合排序在选择切换临界值时,并不是简单比较在前两种算法在不同序列长度下的快慢,因为归并排序在临界值附近过分割,反而会降低效率。不过我也没找到更好的方法# -*- coding: utf-8 -*-def mergesort(l, p, r):
2016-07-15 15:24:29
1736
1
原创 算法导论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
404
原创 使用循环和递归方法实现二分法搜索
对于已排序的序列,实现二分法搜索算法,有循环和递归两种策略。对于这种算法,中心点一直是一个开区间,因此下一次搜索时新区间应该相应的+-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
2326
原创 使用递归进行插入排序
算法导论习题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
843
原创 再次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
352
原创 归并排序使用在c++STL实现
相比上一个C++归并排序的版本,这次复习了一下STL的基本方法因为要使用随机访问迭代器,所以序列使用了vector容器,而要使用lis容器t的merge算法,因此在合并时使用了list容器和vector容器之间相互转换不过让我疑惑的是,似乎VS2013上迭代器不能重载[]运算符?#include#include#include#includetemplatevoid Mer
2016-07-07 21:36:02
4086
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人