算法笔记
liyiwen007
天地有大美而不言
展开
-
《算法导论》笔记--二叉搜索树
二叉搜索树(binary search tree)是经过一定地组织形成的有特定结构特征的二叉树,支持各种动态集合(dynamic set)操作(如insert、delete、maximum、minimum等等)。这些操作的时间复杂度与树的高度成正比。一棵有n个节点的完全二叉树(complete binary tree)的高度不超过lgn。因此,对于完全...2009-01-05 19:20:00 · 155 阅读 · 0 评论 -
《算法导论》笔记--红黑树(一)
满足下面几个条件的二叉搜索树,称为红黑树:1. 任何一个节点都被着色――红色或是黑色。2. 根节点是黑色的。3. 所有的NIL节点都看成黑色(NIL节点是就是一个假想的或是无实在意义的节点,所有应该指向NULL的指针,都看成指向了NIL节点。包括叶节点的子节点指针或是根节点的父指针)。4. 如果一个节点是红色的,那么它的子节...2009-01-09 22:11:00 · 132 阅读 · 0 评论 -
《算法导论》笔记--红黑树(二)
红黑树的节点删除 从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的后继节点(其实前趋也是一样的),...2009-01-13 19:53:00 · 108 阅读 · 0 评论 -
《算法导论》笔记--动态规划概览
什么问题适合使用动态规划来解决?如果一个问题具有以下两个特征,那么就可能适合用动态规划来解决:1. 该问题具有最优子结构2. 子结构独立且重叠 如果一个问题的最优解包含着该问题的子问题的最优解,那么这个问题就具有最优子结构。拥有最优子结构特征的问题,就有可能用动态规划来解决(当然,也有可能用贪婪算法)。在递归式中,一个问题的子问题,以及子子问题的解决,很可能会用到很多重复的子问题...2009-01-15 19:25:00 · 112 阅读 · 0 评论 -
《算法导论》笔记--平摊分析
对于一个操作的序列来讲,平摊分析(Amortize Analysis)得出的是在特定问题中这个序列下每个操作的平摊开销。 一个操作序列中,可能存在一、两个开销比较大的操作,在一般地分析下,如果割裂了各个操作的相关性或忽视问题的具体条件,那么操作序列的开销分析结果就可能会不够紧确,导致对于操作序列的性能做出不准确的判断。用平摊分析就可以得出更好的、更有实践指导意义的结果。因为这个操作序列...2009-01-20 18:37:00 · 333 阅读 · 0 评论 -
《算法导论》笔记--动态规划解活动选择问题
假设某大学有一个活动室,我是这个活动管理员。某天,有6个社团都提出了使用活动室的要求,并告知了他们希望使用活动室的时间段(他们之间相互不知道对方的要求,因此时间安排是没有相互商量过的,可能有重叠)。活动室不能同时被两个以上社团使用。作为管理员,我无法每次都满足所有人的要求,但我想尽量提高活动室的使用率,那么,我如何选取某几项活动,使得活动室的使用时间最长呢? 如上图,假设上图是某一次这些...2009-01-21 21:41:00 · 289 阅读 · 0 评论 -
《算法导论》笔记--霍夫曼(Huffman)树构造
Huffman Code是应用很广泛的一种文本压缩编码方式。它的原理就是用不等长的编码来表示不同出现频率的字符。出现频率高的字符,就用比较短的编码来表示,出现频率低的,就是较长的编码来表示。如下表: 图中是一个文件中出现的字符(abcdeft)以及相应的出现频率。如果使用等长编码方式,则每个字符都要用三位来表示,总的长度就是300个bit,如果用变长码来表示,则总长度为224个bi...2009-01-23 21:52:00 · 294 阅读 · 0 评论 -
《算法导论》笔记--优先级队列
优先级队列也是一种基础的数据结构,应用非常广泛,并且经常作为其它算法的一部分出现。优先级队列一般分最大优先级队列和最小优先级队列。这两种优先级队列只是为了适应不同场合的需要而进行区分实现,在算法上来讲没有什么本质的不同。因此下面只讲最大优先级队列,所记内容都同时对称地适用于最小优先级队列。 最大优先级队列,是这样的一种队列结构,它的内部存放着一系列的元素,每个元素都对应着一个最优级,最...2009-01-28 18:36:00 · 155 阅读 · 0 评论 -
《算法导论》笔记--B树
B树是平衡树的一种,主要用于操作存储在磁盘等二级存储设备上的大量数据。相比起内存(主存)来说,磁盘操作的速度非常慢(慢几个数量级),所以涉及到存储在磁盘的数据的时候,尽量减少磁盘的读取和写入操作对于提高操作速度是非常重要的。B树就是针对这个特点进行设计以满足相应要求的。 B树的性质:1. B树内的每一个节点x都具有以下字段: 当前存储在节点x中的关键字(key)个数n[x]。存储...2009-02-04 18:38:00 · 177 阅读 · 0 评论