算法导论
文章平均质量分 80
fantasy_linux
这个作者很懒,什么都没留下…
展开
-
数据结构之二叉搜索树
一颗二叉搜索树是以一颗二叉树组织的,这样一颗可以使用一个链表数据结构来表示,其中每个节点都是一个对象,除了key之外,每个节点还包含属性left、right和p,它们分别指向节点的左孩子、右孩子和双亲。如果某个孩子结点和父节点不存在,则相应属性的值为NULL,根节点是树中唯一一个父指针为NULL的节点。 6原创 2016-02-29 19:36:16 · 332 阅读 · 0 评论 -
算法导论之堆排序
(二叉)堆,是一个数组,可以被看成一个近似的完全二叉树,树上的每一个节点对应于数组中的一个元素。除了最底层之外,该树是完全充满的原创 2016-02-16 11:14:57 · 583 阅读 · 0 评论 -
算法导论之堆的应用---优先队列
今天为大家介绍的是堆的另一种应用,优先队列,之前也为大家介绍过堆排序,今天则主要介绍优先队列,优先队列和堆一样也有两种形式:最大优先队列和最小优先队列,这里,我们关注于如何基于最大堆实现最大优先队列。优先队列(priority queue)是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字(key),一个最大优先队列支持以下操作: heap_m原创 2016-02-17 11:20:27 · 381 阅读 · 0 评论 -
算法导论值快速排序
今天和大家一起讨论快速排序,对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为o(n * n)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好;它的期望时间复杂度为o(n lgn),而且o(n lgn)中隐含的常数因子非常小。另外,它还能进行原址排序,甚至在虚存环境中也能很好的工作。 快速排序的描述:原创 2016-02-17 15:40:09 · 295 阅读 · 0 评论 -
算法导论之红黑树
红黑树是一颗二叉搜索树,它在每个节点增加了一个存储位来表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的。 树中每个节点包含5个属性:color、key、left、right和p。如果一个节点没有子节点或父节点,则该节点相应指针属性的值为NULL。我们可以把这些NULL视原创 2016-03-02 15:13:24 · 437 阅读 · 0 评论 -
各种排序的排序思想和实现
今天主要和大家讨论九大排序算法,包括冒泡排序、插入排序、选择排序、shell排序、归并排序、快速排序、计数排序、基数排序、堆排序。通过和大家的讨论,相信对大家的在今后的学习和面试肯定会有很大的帮助。下面分别来说明各种排序的排序的思想和其实现。 (1)冒泡排序: 排序思想:设数组a[0..n-1],令i = 0; j从原创 2016-02-27 20:00:27 · 856 阅读 · 0 评论 -
数据结构之二叉树
今天和大家讨论的是二叉树,在讨论二叉树之前,我们在之前也接触了一维的线性存储结构,比如数组,双端链表,以及对双端的链表的封装形成栈和队列,之后又将数组和双端链表的结合形成hash表,在存储和查找方面解决了很多问题,但是一维线性存储结构仍然存在问题,比如一维的线性数据结构在查找时的效率只能达到o(n)的时间复杂度,所以为了解决上述问题,我们引入树型数据结构。 最常见的树型结构为二原创 2016-02-28 22:20:03 · 445 阅读 · 0 评论 -
算法导论之哈夫曼编码
今天和大家一起讨论Haffman编码,哈夫曼编码是基于哈夫曼树,也可以被称为最有二叉树,哈夫曼编码可以有效的压缩数据,通常可以节省20%~90%,具体的压缩率依赖于数据的特性。首先给大家介绍一下什么是最优二叉树;在介绍什么是最有二叉树之前,先说明两个概念 , i>叶子节点的路径长度:从根到叶子节点的边的个数; ii>叶子节点的带权路径长度(WPL):叶子节点的权值 * 路径原创 2016-02-29 18:07:00 · 969 阅读 · 0 评论