随笔分类 -  算法与数据结构

字符串算法[转]
摘要:字符串算法字符串字符判重算法字符串反转算法字符串左旋算法字符串右旋算法字符串旋转匹配算法字符串包含算法字符串删除算法字符串原地替换算法字符串压缩算法字符串变位词检测算法字符串转整数算法字符串全排列算法字符串字典序组合算法字符串的(括号)生成算法字符串字符判重算法给定字符串,确定是否字符串中的所有字符... 阅读全文
posted @ 2015-03-04 13:10 小光zfg
算法范式[转]
摘要:算法:按步骤解决问题的过程。An algorithm is a step-by-step procedure for solving a problem.范式:思考问题的模式。"Pattern of thought" which governs scientific apprehension dur... 阅读全文
posted @ 2014-12-30 12:56 小光zfg
二分查找[转]
摘要:二分查找(Binary Search)给定包含 n 个元素的已排序数组 sorted_array[],求给定元素 x 的位置。递归方式(Recursive)实现迭代方式(Iterative)实现给定包含 n 个元素的已排序数组 sorted_array[],求小于等于给定元素 x 的最近位置(Flo... 阅读全文
posted @ 2014-12-30 12:49 小光zfg
后缀数组[转]
摘要:在定义后缀树(Suffix Tree)时,我们给出了一段简洁的描述:A suffix tree is acompressed trieforall the suffixes of a text.后缀数组(Suffix Array)的定义也同样简洁:A suffix array is asorted ... 阅读全文
posted @ 2014-12-30 12:46 小光zfg
后缀树[转]
摘要:在《字符串匹配算法》一文中,我们熟悉了字符串匹配问题的形式定义:文本(Text)是一个长度为 n 的数组 T[1..n];模式(Pattern)是一个长度为 m 且 m≤n 的数组 P[1..m];T 和 P 中的元素都属于有限的字母表Σ 表;如果 0≤s≤n-m,并且 T[s+1..s+m] = ... 阅读全文
posted @ 2014-12-23 13:02 小光zfg
字典树[转]
摘要:字典树(Trie)是一种很特别的树状信息检索数据结构,如同其名,它的构成就像一本字典,可以让你快速的进行字符插入、字符串搜索等。Trie一词来自 retrieval,发音为 /tri:/ "tree",也有人读为 /traɪ/ "try"。字典树设计的核心思想是空间换时间,所以数据结构本身比较消耗空... 阅读全文
posted @ 2014-12-23 13:01 小光zfg
Boyer-Moore 字符串匹配算法[转]
摘要:字符串匹配问题的形式定义:文本(Text)是一个长度为 n 的数组 T[1..n];模式(Pattern)是一个长度为 m 且 m≤n 的数组 P[1..m];T 和 P 中的元素都属于有限的字母表Σ 表;如果 0≤s≤n-m,并且 T[s+1..s+m] = P[1..m],即对 1≤j≤m,有 ... 阅读全文
posted @ 2014-12-23 12:59 小光zfg
二叉堆[转]
摘要:在计算机科学中,堆(Heap)是一种基于树(Tree)的特殊的数据结构。堆需要满足堆特性(Heap Property):如果节点 A 是节点 B 的父节点,则节点 A 中的键值与节点 B 中的键值的比较顺序关系将适用于堆中的所有节点。也就是可以总结为两种情况。父节点的键值大于等于子节点的键值 A(P... 阅读全文
posted @ 2014-12-23 12:58 小光zfg
哈希表和完美哈希[转]
摘要:我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关... 阅读全文
posted @ 2014-12-23 12:57 小光zfg
平衡查找树(2-3-4 树)[转]
摘要:二叉查找树(Binary Search Tree)在很多情况下可以良好的工作,但它的限制是最坏情况下的渐进运行时间为 O(n)。平衡查找树(Balanced Search Tree)的设计则是保证其高度在最坏的情况下为O(log n),其插入、删除和查找可以实现渐进运行时间O(log n)。现在其实... 阅读全文
posted @ 2014-12-23 12:52 小光zfg
自平衡二叉查找树[转]
摘要:自平衡二叉查找树(Self-Balancing Binary Search Tree)AVL 树红黑树(Red-Black Tree)自平衡二叉查找树(Self-Balancing Binary Search Tree)实际上,BST 操作的运行时间与树的高度(Height)是有关系的。一个树的高度... 阅读全文
posted @ 2014-12-23 12:51 小光zfg
线性时间选择算法[转]
摘要:在一个由 n 个元素组成的集合中,第 i 个顺序统计量(order statistic)是该集合中第 i 小的元素。也就是说,最小值是第 1 个顺序统计量(i = 1),最大值是第 n 个顺序统计量(i = n)。中位数(median)是它所在集合的中点元素。当 n 为奇数时,中位数是唯一的,出现在... 阅读全文
posted @ 2014-12-19 22:38 小光zfg
线性时间排序算法[转]
摘要:线性时间排序算法列表线性时间排序NameAverageWorstMemoryStableDescription计数排序(Counting Sort)n + kn + kn + kStableIndexes using key values.基数排序(Radix Sort)n * kn * kn + ... 阅读全文
posted @ 2014-12-19 22:25 小光zfg
比较排序算法[转]
摘要:比较排序算法分类比较排序(Comparison Sort)通过对数组中的元素进行比较来实现排序。比较排序算法(Comparison Sorts)CategoryNameBestAverageWorstMemoryStability插入排序(InsertionSorts)插入排序(Insertion ... 阅读全文
posted @ 2014-12-19 22:24 小光zfg
二叉查找树[转]
摘要:在文章《常用数据结构及复杂度》中,介绍了一些计算机程序设计中常用的线性数据结构,包括 Array、ArrayList、LinkedList、List、Stack、Queue、Hashtable 和 Dictionary 等。并简单介绍了这些数据结构的内部实现原理和常用操作的运算复杂度,以及如何选择合... 阅读全文
posted @ 2014-12-19 22:22 小光zfg
算法复杂度分析[转]
摘要:为什么要进行算法分析?预测算法所需的资源计算时间(CPU 消耗)内存空间(RAM 消耗)通信时间(带宽消耗)预测算法的运行时间在给定输入规模时,所执行的基本操作数量。或者称为算法复杂度(Algorithm Complexity)如何衡量算法复杂度?内存(Memory)时间(Time)指令的数量(Nu... 阅读全文
posted @ 2014-12-19 22:21 小光zfg