算法
文章平均质量分 56
_小草原
菜鸟啊
展开
-
算法导论(5) 二叉搜索树
二叉搜索树设x是二叉搜索树的一个结点,如果y是x左子树的一个结点,那么y.key≤x.key,如果y是x有字数的一个结点,那么y.key≥x.key。二叉树有三种遍历的方法: 先序遍历:输出根的关键字在其左右子树的关键字之前。 中序遍历:输出根的关键字在其左右子树的关键字之间。 后序遍历:输出根的关键字在其左右子树的关键字之后。主要的操作包括查找,遍历,最大最小关键字寻找,前驱后继结点查找,插原创 2016-07-19 21:33:58 · 231 阅读 · 0 评论 -
算法导论(4) 顺序统计量
算法导论(4) 1.最大值与最小值 将一对输入元素相互进行比较,然后把较小的与当前的最小值比较,把较大的与当前最大值比较,这样每两个元素比较3次,最多需要3*n/2次比较可以同时找到一组输入元素中的最大值与最小值。 2.顺序统计量 一个n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。中位数是i=(n+1)/2处的元素。 期望为线性时间的选择算法RandomSelect与最坏情原创 2016-07-12 20:59:26 · 583 阅读 · 0 评论 -
算法导论(2)
1.随机排列数组 很多随机算法都通过对给定的输入变换排列以使输入随机化。一种通常的方法是为数组的每个元素赋一个随机的优先级,然后根据优先级对数组中的元素排序。另一个更好地办法是原址排列给定数组,将原数组随机排列。2.堆 二叉堆是一个数组,可以看成是一个近似的完全二叉树,除了底层之外,其余层都是满的。表示堆的数组一般有两个属性,数组元素个数A.length以及有多少堆元素在该数组中A.heap-s原创 2016-07-10 17:12:14 · 279 阅读 · 0 评论 -
算法导论(3) 快速排序、计数排序、基数排序
1.快速排序 快速排序也采用了分治思想: 分解:数组A[p..r]划分为两个可能为空的子数组A[p..q-1]和A[q+1..r],前者均小于等于A[q],后者均大于等于A[q]。 解决:递归调用,对两个子数组继续采用快速排序的方法。 合并:数组是原址操作,不需要合并。 因为看过好多次快速排序的实现方式,因此学习了多种快速排序的实现方式,不过算法导论上的方法QuickSort2更容易理解以及记忆。原创 2016-07-10 21:37:46 · 337 阅读 · 0 评论 -
算法导论(0)
1.插入排序INSERTION-SORT(A) for j=2 to A.length key=A[j] i=j-1 while(i>0&&A[i]>key) A[i+1]=A[i]; i=i-1 A[i+1]=key;每次取前j个数字排序,将第j个数字插入到1到j-1个数字中。原创 2016-07-04 21:11:04 · 271 阅读 · 0 评论 -
算法导论(6) 红黑树
红黑树许多“平衡”搜索树中的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn)。一颗红黑树是满足下面红黑性质的二叉搜索树(当一个结点没有子结点或者父结点时,指针设为空,并且将空指针视为叶结点(外部结点),为黑色): (1)每个结点或是红色的,或是黑色的。 (2)根结点是黑色的。 (3)每个叶结点是黑色的。 (4)如果一个结点是红色的,则它的两个子结点都是黑色的。 (5)对原创 2016-07-24 20:17:14 · 368 阅读 · 0 评论 -
算法导论(1)
分治策略 1.递归式: 用来描述递归求解的分治算法的运行时间。求解递归式有三种方法: (1)代入法,猜测一个界,然后用数学归纳法证明这个界是正确的。 (2)递归树法,将递归式转换为一棵树,利用递归式,将每层的代价以及深度都表示出来,节点代表不同层次产生的代价,最后利用边界和技术求解。递归树法常用来生成一个好的猜测,然后利用代入法验证是否正确。 (3)主方法。 求解递归式时,我们常忽略向下原创 2016-07-09 18:30:14 · 311 阅读 · 0 评论