
算法导论学习
文章平均质量分 73
acm_lkl
这个作者很懒,什么都没留下…
展开
-
算法导论学习之插入排序+合并排序
最近准备花时间把算法导论详细的看一遍,强化一下算法和数据结构的基础,将一些总结性的东西写到博客上去。一.插入排序 算法思想:如果一个数组A,从A[1–n-1]都是有序的,然后我们将A[n]插入到A[1–n-1]的某个合适的位置上去那么就可以保证A[1–n]都是有序的。这就是插入排序的思想;具体实现的时候我们将数组的第一个元素看出有序,然后从第二个元素开始按照上面的步骤进行插入操作,直到插入原创 2015-03-06 22:36:26 · 1094 阅读 · 0 评论 -
算法导论学习之堆+堆排序+堆构成优先队列
注:堆分为最大堆和最小堆两种,下面我们讨论的堆都是指的最大堆,最小堆的性质与其是类似的。堆数据结构是一种数组对象,可以被视为一棵完全二叉树(这棵二叉树除最后一层外,其余每层都是填满的);我们用一个数组来存储一个堆,表示堆的数组有两个属性:length[A]表示的是数组中的元素个数,headsize[A]表示堆中元素个数(也就是说数组中的元素不一定都是堆中的元素)。 下面不加证明的给出一些堆的性质:原创 2015-03-11 00:05:50 · 2378 阅读 · 1 评论 -
算法导论学习之快排+各种排序算法时间复杂度总结
快排是一种最常用的排序算法,因为其平均的时间复杂度是nlgn,并且其中的常数因子比较小。一.快速排序 快排和合并排序一样都是基于分治的排序算法;快排的分治如下: 分解:对区间A[p,r]进行分解,返回q,使得A[p–q-1]都不大于A[q] A[q+1,r]都大于A[q]; 求解:对上面得到的区间继续递归进行快排 合并:因为快排是原地原创 2015-03-11 23:48:49 · 4683 阅读 · 1 评论 -
算法导论学习之线性时间排序+排序算法稳定性总结
前面我们学习的几种排序算法都是基于比较的,对于任何输入数据他们都是适用的,其最坏的时间复杂度不会低于nlgn; 但对于一些比较特殊的输入数据,我们可以不采取比较的方法而是采用其它的方法对其进行排序,以达到线性的时间复杂度。下面就来介绍三种这样的算法:计数排序,基数排序,桶排序(因为这几种算法不常见,我只实现了计数排序,其它两种排序用伪代码表示)。一.计数排序 算法思想:给定n个位于0–k之原创 2015-03-13 17:55:47 · 1304 阅读 · 0 评论 -
算法导论学习之线性时间求第k小元素+堆思想求前k大元素
对于以前,如果要我求第k小元素,或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,但是现在有了更好的思路。一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法。其具体的分治思路如下: 1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分,使得A[p,q-1]都小于A[q],A[q+1,r]都不小于A[q]; 2.求解:如果A[q]恰好是原创 2015-03-18 13:06:03 · 2794 阅读 · 0 评论 -
算法导论学习之--二叉搜索树
二叉查找树的性质:对于以i为根节点的子树,其右子树中所有节点的关键值都不小于根节点的关键值,左子树中所有节点的关键值都小于根节点的关键值。大部分在二叉搜索树中的操作都与树的高度成正比。下面依次介绍一些二叉树的操作。首先给出二叉查找树的节点定义:///BST的节点typedef struct node{ node *p; ///指向父节点的指针 node *left; ///指向原创 2015-04-13 18:53:03 · 602 阅读 · 0 评论 -
算法导论学习---红黑树详解之插入(C语言实现)
前面我们学习二叉搜索树的时候发现在一些情况下其高度不是很均匀,甚至有时候会退化成一条长链,所以我们引用一些”平衡”的二叉搜索树。红黑树就是一种”平衡”的二叉搜索树,它通过在每个结点附加颜色位和路径上的一些约束条件可以保证在最坏的情况下基本动态集合操作的时间复杂度为O(nlgn).下面会总结红黑树的性质,然后分析红黑树的插入操作,并给出一份完整代码。先给出红黑树的结点定义:#define RED 1原创 2015-07-05 11:18:18 · 4550 阅读 · 3 评论 -
算法导论学习--红黑树详解之删除(含完整红黑树代码)
前面我们讨论了红黑树的插入的实现,基本思想是分类讨论;然后分情况讨论以后我们发现插入操作调整函数只需要处理三种情况,并不是太复杂。但是删除操作会更复杂一点,因为二叉搜索树的删除操作本身就分成了多种情况,这样在执行删除操作后要处理的情况会更多;下面对于删除操作我们仍旧采取分类讨论的方法,将所有的情况梳理清楚后,就可以理解红黑树的删除调整函数的实质了。 下面先放出红黑树删除函数的代码://红黑树删除函原创 2015-07-06 20:05:16 · 6487 阅读 · 7 评论