
算法浅究
文章平均质量分 52
waponx
不登高山,不知天之高也;不临深溪,不知地之厚也。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序
归并排序是通过递归实现分治的。主要的思想就是把一个大的序列不断的细分成小的序列,然后对这些小的序列进行排序,之后将这些小的序列不断的归并,形成有序的大的序列。代码如下:#include using namespace std;void Print(int len, int *array){ int i = 0; for(i = 0; i < len; ++i) { co原创 2015-02-01 15:34:31 · 510 阅读 · 0 评论 -
插入排序
插入排序:把后面的元素插入到前面(前面的元素要往后挪一个位置)代码比较简单,思路也很简单。当部分的子序列已经有一定顺序的时候,插入排序是很快的。代码:#include using namespace std;void InsertSort(int n, int *array){ int i = 0; int j = 0; int k = 0;原创 2015-02-01 15:25:11 · 595 阅读 · 0 评论 -
利用树形结构理解与学习动态规划
在这里先介绍两篇很好的博文(强烈推荐第二篇,讲的很好,很易懂):http://www.360doc.com/content/13/0601/00/8076359_289597587.shtml和http://www.cnblogs.com/sdjl/articles/1274312.html下面还是就这第二篇里面的金矿模型来分析(Y:开采。N:不开采)。原创 2015-02-11 15:52:58 · 1080 阅读 · 0 评论 -
KMP算法详解
普通的字符串匹配算法思想是:从主串的第一个字符开始(假设索引为i)和模式串的第一个字符(假设索引为j)比较,如果相等则继续比较后面的字符,如果不相等则回溯主串到中的开始匹配的字符的下一个位置,再重新开始比较。KMP算法:KMP算法的思想是不用回溯主串中的索引,利用“部分匹配”的结果移动模式串。什么是“部分匹配”?在介绍部分匹配之前先介绍两个概念:前缀(prefixe原创 2015-03-04 21:40:46 · 496 阅读 · 0 评论 -
基于三叉链表存储结构的二叉树的不用栈的非递归遍历
三叉链表和二叉链表的不同在于,三叉链表多了一个parent指针域,指向双亲节点。便于访问双亲节点。有了这个parent指针域,我们就能实现不用栈的非递归遍历二叉树。现在,让我们来看看基于三叉链表存储结构的二叉树定义:原创 2015-05-18 23:18:18 · 4959 阅读 · 3 评论 -
堆排序
堆排序的最坏时间复杂度是O(nlogn),平均时间复杂度是O(nlogn)。但是堆排序的时间常数比较大,因此从平均来看堆排序的时间复杂度反而是最差的。基本接口:1.插入:插入一个新元素的时候,首先将这个新元素放在最后,因为新元素的插入操作可能会破坏堆的性质,因此执行上游操作。2.删除:删除一个新元素的时候,首先要将堆顶元素和最后一个元素交换。然后将堆的大小减一。删除原创 2016-04-21 17:31:32 · 1254 阅读 · 0 评论 -
快速排序
快速排序是已知的在实践中最快的排序算法。它的最坏时间复杂度是O(n^2),平均时间复杂度是O(nlogn)。快速排序的算法主要的思想在于分部算法(partition),下面的步骤是基于升序排序的假设: 1.选取合适的枢纽。 2.遍历整个数组,将数组中小于或者等于枢纽的元素放在左边,大于或者等于枢纽的元素放在右边。快排的最坏情况出现在输入的数据是有序的,且原创 2016-04-21 22:25:50 · 808 阅读 · 0 评论 -
快排的改良版——内省式排序
快速排序是一种很快的算法,它平均的时间复杂度WieO(nlgn), 最坏时间复杂度为O(n^2)。但是快排有很多改良版,其中一种就是内省式的快排,在STL中的快快排使用的就是这种算法。 1.为什么需要这种算法因为快排在面对小数组(比如大小为10的数组)且基本有序的情况下,它的表现还没插入排序要好。因为数组的基本有序,使得插入排序不用很多次的执行元素的移动,并且可以避免递归。 在SG原创 2016-04-10 23:31:22 · 3735 阅读 · 0 评论