随笔分类 -  Algorithms

摘要:1039_字符消除题目链接: http://hihocoder.com/problemset/problem/1039很久没刷题了赶紧刷点水题以免各种面试被bs题目大意:中文题目直接看题就懂思路:一时间也没有什么很好的感觉速度很快的思路,只好老老实实按照题目意思一步步的进行,还好能够AC.首先要考虑... 阅读全文
posted @ 2015-09-14 11:55 Jolin123 阅读(430) 评论(0) 推荐(0)
摘要:本章内容:一 斐波那契堆结构二 可合并堆操作三 关键字减值和删除一个结点四 最大度数的界可合并堆支持以下5种操作:MAKE-HEAP():创建和返回一个新的空堆INSERT(H,x):将一个含关键字的元素x插进堆H中MINIMUN(H):返回一个指向堆H中具有最小关键字元素的指针EXTRACT-MI... 阅读全文
posted @ 2014-04-22 08:31 Jolin123 阅读(769) 评论(0) 推荐(0)
摘要:B树是为磁盘或其他存取的辅助存储设备而设计的一种平衡搜索树,与红黑树的不同之处在于B树的结点可以有很多孩子。主要内容:一 B树的定义二 B树上的基本操作三 从B树中删除关键字一 B树的定义1. 一棵B树T是具有一下性质的有根树:(1) 每个结点x有以下属性: a. x.n,当前存储在结点x中的关键字个数 b. x.n个关键字本身x.key1,x.key2,...,x.keyx.n,以非降序存放,即x.key1 = 2来表示这些界: a. 除了根结点以外的每个结点必须至少有t - 1个关键字。即除了根结点以外的每个内部结点至少有t个孩子。如果树非空,根结点至少有一个关键字。 b. 每... 阅读全文
posted @ 2014-04-11 10:19 Jolin123 阅读(452) 评论(0) 推荐(0)
摘要:本章内容:1.聚合分析2.核算法3.势能法4.动态表一 聚合分析1. 在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,它不涉及概率,可以保证最坏情况下每个操作的平均性能。2. 摊还代价:对所有n,一个n个操作的序列最坏情况下话费时间为T(n),从而摊还代价(平均代价)为 T(n) / n.3. 栈操作中加入MULTIPOP(S, k),可以同时删除栈顶的k个元素,总元素少于k则全部删除。 下面分析一个由n个PUSH, POP, 和MULTIPOP组成的操作序列在一个空栈上的执行情况。假设栈的大小最大为n,那么MULTIPOP的最坏情况代价是O... 阅读全文
posted @ 2014-03-27 09:25 Jolin123 阅读(1085) 评论(0) 推荐(0)
摘要:本章内容:一 动态顺序统计二 如何扩张数据结构三 区间树一 动态顺序统计参照:红黑树1. n个元素集合中的第 i 个顺序统计量就是简单地规定为该集合中的具有第 i 小关键字的元素。对于一个无序的集合可以在O(n)的时间内确定任何的顺序统计量。这里修改一下红黑树使得可以在O(lg n)时间内确定任何的顺序统计量。2. 顺序统计树:在原先红黑树的每个结点x加入属性size , 表示以x为根的子树的总结点数(包括x),定义哨兵大小为0,即T.nil.size = 0. 有等式: x.size = x.left.size + x.right.size + 13. 为了使关键字可以相同,... 阅读全文
posted @ 2014-03-24 15:09 Jolin123 阅读(251) 评论(0) 推荐(0)
摘要:红黑树 普通的二叉搜索树高度如果较高时,一些集合操作可能不比链表上执行的快,而红黑树属于“平衡”搜索树的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn).(一)红黑树的性质 红黑树是一棵二叉搜索树,在每个结点上增加了一个存储位来表示结点的颜色,可以为RED或者BLACK。通过一些约束可以保证没有一条路径会比其他路径长出2倍,因而是近似于平衡的。红黑树的5个性质:1. 每个结点或是红色的,或是黑色的。2. 根结点是黑色的。3. 每个叶节点(NIL)是黑色的。4. 如果一个结点是红色的,则它的两个子结点都是黑色的。5. 对每个结点,从该结点到其所有后代叶结点的简单路径上,均.. 阅读全文
posted @ 2014-03-22 20:41 Jolin123 阅读(1429) 评论(0) 推荐(0)
摘要:任何比较排序在最坏情况下要经过Ω(nlgn)次比较。而计数排序,基数排序和桶排序可以突破这个下界,因为它们不是比较来确定排序顺序的。1. 计数排序 计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k = O(n)时,排序的运行时间是Θ(n)。 假设输入是一个数组A[1..n],A.length = n.我们还需要两个数组:B[1..n]存放排序的输出,C[0..k]提供临时存储空间。伪代码: 在10到12行的循环部分,把每个元素A[j]放到它在输出数组B中的正确位置上。总的时间代价是Θ(k + n),实际工作中当k = O(n)时,一般采用计数排序,运... 阅读全文
posted @ 2014-01-29 11:30 Jolin123 阅读(394) 评论(0) 推荐(0)
摘要:堆排序时间复杂度是O(n lgn),并且具有空间原址性,即任何时候只需要常数个额外的元素空间存储临时数据。1. 堆 (二叉)堆是一个数组,可以被看成一个近似的完全二叉树,树上每一个节点对应数组中的一个元素。除最底层外,该树是完全充满的,而且是从左向右填充。 父节点,左孩子,右孩子的下标关系: 最大堆性质:A[PARENT(i)] >= A[i] 堆中最大元素存放在根节点中最小堆性质:A[PARENT(i)] <= A[i] 堆中最小元素存放在根节点中高度:定义一个堆中的节点的高度就为该节点到叶节点最长简单路径上边的数目。所以一个包含n个元素的堆的高度是Θ(lgn)一些基本过程:MA 阅读全文
posted @ 2014-01-26 08:10 Jolin123 阅读(458) 评论(0) 推荐(0)
摘要:上一节的利用有限自动机的匹配算法需要O(m|∑|)的预处理时间,因为预先已经把转移函数计算出来。而KMP算法则是将计算转移函数时需要的信息存储在数组π[1..m]中,按照即时的需要计算状态转移函数,这样可以把预处理时间减少到O(m),而匹配时间仍然是O(n)。Knuth-Morris-Pratt 算法 首先简单看一下朴素字符串匹配算法的过程。假设模式P = ababaca,图(a)是针对文本T模板的一个特定偏移s。 此时前5个字符匹配成功,第6个失败,这时已经匹配的前5个字符其实已经蕴含了下一个偏移可以利用的一些信息。如图,偏移s + 1必然无效,因为模式P前2个字符不等而第2个字符... 阅读全文
posted @ 2013-11-29 08:51 Jolin123 阅读(457) 评论(0) 推荐(0)
摘要:本文内容与《算法导论》中字符串匹配章节相关并部分摘录。 常用的字符串匹配算法有朴素字符串匹配算法,Rabin-Karp算法,利用有限自动机进行字符串匹配和KMP算法等。前面两种比较简单,重点是后面两种。利用有限自动机进行字符串匹配 假设要对文本字符串T进行扫描,找出模式P的所有出现位置。这个方法可以通过一些办法先对模式P进行预处理,然后只需要对T的每个文本字符检查一次,并且检查每个文本字符所用时间为常数,所以在预处理建好自动机之后进行匹配所需时间只是Θ(n)。 假设文本长度为n,模式长度为m,则自动机将会有0,1,...,m这么多种状态,并且初始状态为0。先抛开自动机是怎样计算出来的... 阅读全文
posted @ 2013-11-26 16:16 Jolin123 阅读(3476) 评论(0) 推荐(1)