算法
xuqn0606
这个作者很懒,什么都没留下…
展开
-
《算法导论》第二章思考题——逆序对(python实现)
设A[1..n]是一个包含n个不同数的数组。如果在i < j的情况下,有A[i] > A[j],则(i, j)就称为A中的一个逆序对,给出任意一个数组,计算逆序对个数。借助归并排序思想可以得到O(n log n)的最坏运行时间。 归并排序的想法是先分开左右 两个子序,每个子序列排序后再合并。这里求逆序对也是一样,分开后先计算每个子序内部的逆序对数量并将其从...原创 2018-08-12 14:17:33 · 2560 阅读 · 0 评论 -
《算法导论》4.1-4,4.1-5
这道题在之前基础上,要求在最后判断是否结果小于0,如果最终返回结果小于0,则返回[],直接暴力求解只需要最后返回时进行判断输出即可,但是递归求解时无法在函数中进行判断,所以我在函数外层又加了一层函数。。。。orzdef find_max_cross_subarray(list, low, high, mid): """找出跨越中点的最大子数组""" left_sum = fl...原创 2018-08-13 11:25:23 · 1130 阅读 · 3 评论 -
《算法导论》第四章矩阵相乘
1.采用递归分治的方法进行矩阵相乘,代码如下:def matrix_divide(mat): """将n*n分解为4个n/2*n/2的四个矩阵""" n = len(mat) / 2 a11 = [[0 for i in range(n)]for j in range(n)] a12 = [[0 for i in range(n)] for j in rang...原创 2018-08-13 21:47:50 · 361 阅读 · 0 评论 -
《算法导论》5.1-2
要想使用random(0,1)生成(a,b)之间的随机数,可以进行以下步骤:1.相当于实现random(0,b-a)之间的随机数2.但是0101等序列数字直接相加得到的数字概率不等,用二进制这样每个位上出现01的概率就相等,换言之生成的二进制数概率相等,再将二进制转化为十进制即可3.具体做法就是先找出大于b-a的最小2的n次方,即二进制的位数范围,确定位数后每位进行01随机的生成,转为...原创 2018-08-16 11:29:54 · 314 阅读 · 0 评论 -
全排列递归与非递归python实现
全排列就是,给定一个序列,列举出该序列中元素所有的排列情况,列举方法有递归和非递归两种,详细可以见这位大神写的博客:https://blog.csdn.net/jopus/article/details/18998403。我只列出来两个重要的图吧。1.非递归:字典序法 ,如下图[1,2,3]的例子2.递归方法 递归方法就是将序列中第一位固定,然后将后面...原创 2018-08-17 17:24:34 · 1811 阅读 · 0 评论 -
《算法导论》第六章堆排序 python代码
堆排序具有的优点:时间O(nlgn),具有空间原址性,按照书上的讲法,主要步骤分三步:1.假定一个堆中一个节点,子树已经为最大堆但根不比左右子树大,构造一个算法将根放置合适位置,让子树加该节点满足最大堆的性质。MAX-HEAPIFY,复杂度O(lgn)2.从堆的最后一个非叶节点开始,使用1的算法保证直到根节点整个堆满足最大堆的性质BUILD-MAX-HEAP,复杂度O(nlgn)3.尽...原创 2018-08-28 16:21:40 · 329 阅读 · 0 评论 -
《算法导论》第六章优先队列 python 实现
优先队列是堆排序的一个应用 :支持的操作:返回最大值,去掉并返回最大值,插入元素def max_heapify(A, i, heap_size): l = 2 * i r = 2 * i + 1 if l <= heap_size and A[l-1] > A[i-1]: largest = l else: la...原创 2018-08-28 16:26:26 · 161 阅读 · 0 评论 -
《算法导论》第七章 快速排序 python实现
快速排序时间复杂度平均O(nlgn),最坏的话是O(n^2),原址排序,是不稳定的排序算法过程可以描述为两步:1.分解,将A[p...r]分解为A[p...q-1]和A[q+1...r],前者每个元素均小于A[q],后者每个元素均大于A[q]2.通过递归对A[p...q-1]和A[q+1...r]进行排序python实现如下:def quick_sort(A, first, ...原创 2018-08-28 16:45:24 · 260 阅读 · 0 评论 -
《算法导论》第八章 计数排序、基数排序、桶排序 python实现
1. 计数排序 计数排序需要知道所有元素的范围,主要思想是:统计出每个数字出现了几次,存至C中,然后将C中的数字转为小于该数字的元素个数,然后从后往前依次填写,是稳定的排序方法。python实现如下:def count_sort(A, k): """ 计数排序 :param A:待排序列 :param k:元素范围 """ ...原创 2018-08-28 20:10:00 · 276 阅读 · 0 评论