随笔分类 -  算法

摘要:议题:二分查找树性能分析(Binary Search Tree Performance Analysis)分析:二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任何节点的键值大于等于该节点左子树中的所有键值,小于等于该节点右子树中的所有键值,并且每个节点域中保存 一... 阅读全文
posted @ 2014-05-31 10:19 Leo C. 阅读(1167) 评论(0) 推荐(0) 编辑
摘要:议题:基于堆的优先级队列(最大堆实现)分析:堆有序(Heap-Ordered):每个节点的键值大于等于该节点的所有孩子节点中的键值(如果有的话),而堆数据结构的所有节点都按照完全有序二叉树 排。当使用数组存储这种数据结构时,在数组大小限制和堆大小限制下,如果当前节点下标为i,其父亲节点下标为i/2,... 阅读全文
posted @ 2014-05-31 09:58 Leo C. 阅读(555) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小)分析:算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法;使用显示下推栈存储快速排序中的每一次划分结果 (将left和right都压入堆栈),并且首先处理划分序列较短的子序列(也就是在得... 阅读全文
posted @ 2014-05-30 10:13 Leo C. 阅读(658) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序算法实现之三(三路划分遍历,解决与划分元素相等元素的问题)分析:算法原理:使用三路划分策略对数组进行划分(也就是荷兰国旗问题,dutch national flag problem)。这个实现是对实现二的改进,它添加处理等于划分元素的值的逻辑,将所有等于划分元素的值集中在一起,并且以后... 阅读全文
posted @ 2014-05-30 09:54 Leo C. 阅读(803) 评论(0) 推荐(0) 编辑
摘要:议题:快速排序实现之一(单向遍历)分析:算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分递归调用QuickSort;另一部分是partition,选取划分元素P(随机选取数组中的一个元素,交换... 阅读全文
posted @ 2014-05-30 09:39 Leo C. 阅读(1859) 评论(0) 推荐(0) 编辑
摘要:四种基本算法概述:基本排序:选择,插入,冒泡,希尔。上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件。前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成正比;前三种算法在平均,最坏情况下都是N2,而且都不需要额外的内存;所以尽管他们的运行时间只相差常数倍... 阅读全文
posted @ 2014-05-30 09:21 Leo C. 阅读(535) 评论(0) 推荐(0) 编辑
摘要:议题:KMP算法(D.E. Knuth, J.H. Morris, V.R. Pratt Algorithm)分析:KMP算法用于在一个主串中找出特定的字符或者模式串。现在假设主串为长度n的数组T[1,n],模式串为长度m的数组P[1,m];数组T和P满足:n>m,且所有元素都来自有限字母表中的字符... 阅读全文
posted @ 2014-05-29 11:19 Leo C. 阅读(668) 评论(0) 推荐(0) 编辑
摘要:红黑树(Red-Black Tree)红黑树是一种BST,但是每个节点上增加一个存储位表示该节点的颜色(R或者B);通过对任何一条从root到leaf的路径上节点着色方式的显示,红黑树确保所有路径的差值不会超过一倍,最终使得BST接近平衡;红黑树内每个节点包含五个属性:color, key, lef... 阅读全文
posted @ 2014-05-29 10:51 Leo C. 阅读(638) 评论(0) 推荐(0) 编辑
摘要:广度优先搜索&深度优先搜索(Breadth First Search & Depth First Search)BFS优缺点:同一层的所有节点都会加入队列,所以耗用大量空间;仅能非递归实现;相比DFS较快,空间换时间;适合广度大的图;空间复杂度:邻接矩阵O(N^2);邻接表O(N+E);时间复杂度:... 阅读全文
posted @ 2014-05-29 10:01 Leo C. 阅读(1374) 评论(0) 推荐(0) 编辑
摘要:图最短路径算法(Graph Shortest Path Algorithm, eg: Floyd-Warshall, Dijkstra, Bellman-Ford, SPFA, Kruskal, Prim, Johnson)最短路径问题有多个衍生问题(并且每个衍生问题都涉及是否有负权边)单源点最短路... 阅读全文
posted @ 2014-05-28 10:23 Leo C. 阅读(1221) 评论(0) 推荐(0) 编辑
摘要:A*搜索算法(A Star Search Algorithm)A*算法主要用于在二维平面上寻找两个点之间的最短路径。在从起始点到目标点的过程中有很多个状态空间,DFS和BFS没有任何启发策略所以穷举所有的状 态空间,不适合仅需对局部进行搜索的应用。启发式搜索的关键在于:当前节点在选择下一步节点的时候... 阅读全文
posted @ 2014-05-28 09:56 Leo C. 阅读(2277) 评论(0) 推荐(0) 编辑
摘要:B树(B-Tree)1970年由R. Bayer和E. Mccreight提出的一种适用于外查找的树,一种由BST推广到多叉查找的平衡查找树,由于磁盘的操作速度远小于存储器的读写速度,所以要求在尽量少 的操作次数内完成CPU分配的任务,B树就按照此原则设计,B树与红黑树的主要区别在于B树节点可以有超... 阅读全文
posted @ 2014-05-28 09:50 Leo C. 阅读(446) 评论(0) 推荐(0) 编辑
摘要:二叉堆(Binary Heap)二叉堆是完全二叉树(或者近似完全二叉树);其满足堆的特性:父节点的值>=(<=)任何一个子节点的键值,并且每个左子树或者右子树都是一 个二叉堆(最小堆或者最大堆);一般使用数组构建二叉堆,对于array[i]而言,其左子节点为array[2*i],其右子节点为 arr... 阅读全文
posted @ 2014-05-28 09:28 Leo C. 阅读(1629) 评论(0) 推荐(0) 编辑
摘要:议题:AC自动机(Aho-Corasick Automation)分析:此算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一;一个常见的例子就是给定N个单词,给定包含M个字符的文章,要求确定多少个给定的单词在文章中出现过;AC自动机在匹配文本时不需要回溯,处理时间复杂度与pattern无关... 阅读全文
posted @ 2014-05-27 10:15 Leo C. 阅读(1036) 评论(0) 推荐(0) 编辑
摘要:议题:动态规划(Dynamic Programming)分析:DP主要用于解决包含重叠子问题(Overlapping Subproblems)的最优化问题,其基本策略是将原问题分解为相似的子问题,通过求解并保存最简单子问题的解,然后逐步合并成为原问题的解,由于需 要查询子问题的解,所以需要一个表格记... 阅读全文
posted @ 2014-05-27 10:09 Leo C. 阅读(470) 评论(0) 推荐(0) 编辑
摘要:议题:布隆过滤器(Bloom Filter)分析:BF由一个很长的二进制向量和一系列随机映射的函数组成,通过多个Hash函数将一个元素映射到一个Bit Array中的多个点,查询的时候仅当所有的映射点都为1才能判断元素存在于集合内;BF用于检索一个元素是否在一个集合中,记忆集合求交集;优点是空间 和... 阅读全文
posted @ 2014-05-27 09:58 Leo C. 阅读(353) 评论(0) 推荐(0) 编辑
摘要:议题:线段树(Interval Tree)分析:线段树是一种二叉搜索树,将一个大区间划分成单元区间,每个单元区间对应一个叶子节点;内部节点对应部分区间,如对于一个内部节点[a, b]而言,其左子节点表示的区间为[a, (a+b)/2],其右子节点表示的区间为[1+(a+b)/2, b];对于区间长度... 阅读全文
posted @ 2014-05-27 09:52 Leo C. 阅读(1120) 评论(0) 推荐(0) 编辑
摘要:议题:线索二叉树(Threaded Binary Tree)分析:为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指针可以某种遍历方式对二叉树进行遍历,而加了这些额外指针的二叉树就是线索二叉树;对于含有N个节点的二叉树而... 阅读全文
posted @ 2014-05-26 09:52 Leo C. 阅读(757) 评论(0) 推荐(0) 编辑
摘要:议题:后缀数组(Suffix Array)分析:后缀树和后缀数组都是处理字符串的有效工具,前者较为常见,但后者更容易编程实现,空间耗用更少;后缀数组可用于解决最长公共子串问题,多模式匹配问题,最长回文串问题,全文搜索等问题;后缀数组的基本元素:给定一个string,其长度为L,后缀指的是从strin... 阅读全文
posted @ 2014-05-26 09:48 Leo C. 阅读(597) 评论(0) 推荐(0) 编辑
摘要:议题:TRIE树 (Trie Tree or Prefix Tree);分析:又称字典树或者前缀树,一种用于快速检索的多叉树结构;英文字母的Trie树为26叉树,数字的Trie树为10叉树;All the descendants of a node have a common prefix of t... 阅读全文
posted @ 2014-05-26 09:23 Leo C. 阅读(403) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示