数据结构及算法
xuzhezhaozhao
这个作者很懒,什么都没留下…
展开
-
求二叉树中任意两结点的最近共同祖先的算法及其证明
一、问题描述 已知一个二叉树T,以及该二叉树中的某两个结点A和B。求:结点A和B的最近共同祖先。二、算法描述先序遍历二叉树T,得到其先序序列Seqpre。不失一般性地,设:Seqpre= (θ1,θ2,…, θa,A, …, B, …, θN); (式1)后序遍历二叉树T,得到其后序序列Seqpost。不失一般性地,设:Seqpost= (λ1转载 2013-04-24 23:36:56 · 4749 阅读 · 1 评论 -
求最大公约数的O(logN) 算法
看数据结构与算法分析一书看到O(logN)复杂度求最大公约数的算法。算法如下:/* 求最大公约数 */unsigned int Gcd(unsigned int M, unsigned int N){ unsigned int Rem; while (N > 0) { Rem = M % N; M = N; N = Rem; } return M;}该算法原创 2013-06-14 23:57:28 · 1782 阅读 · 0 评论 -
A* 算法, 推荐几篇写的很好的博文
用一只神奇的猫给你介绍A*的基本原理: http://www.raywenderlich.com/4946/introduction-to-a-pathfinding深度思考A*算法, 更深入更详细, 值得一看: http://theory.stanford.edu/~amitp/GameProgramming/原创 2013-07-19 09:59:45 · 1263 阅读 · 0 评论 -
高效求幂取余 算法,复杂度 log(n)
做TopCoder SRM 576 D2 L3 题目时,程序有个地方需要对一个数大量求幂并取余,导致程序运行时间很长,看了Editoral之后,发现一个超级高效的求幂并取余的算法,之前做System test时,程序运行时间(最慢的测试用例)为500ms左右,使用此方法之后,运行时间直接减为20ms,快了20多倍,所以将此方法记录下来。算法时间复杂度为 log(n)。这个算法其实就是 数据结构与算法分析 (Weiss 著) 一书中开头的那个递归求幂算法的非递归版,简洁明了。 /原创 2013-08-17 21:55:00 · 3516 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programmin转载 2013-10-09 23:07:55 · 2118 阅读 · 0 评论 -
ACM经典书籍推荐
学计算机的人是幸福的,因为在这个领域中有如此多的通俗易懂(相对来说)的经典好书,你需要做的只是坚持把它们一本一本读下去而已。在这里列出一些我看过或者准备看的算法书籍,以供参考。 1. CLRS 算法导论 算法百科全书,只做了前面十几章的习题,便感觉受益无穷。 2. Algorithms 算法概论 短小精悍,别据一格,准经典之作。一个坏消息: 同算法导论,该书没有习题转载 2014-01-18 21:35:23 · 2283 阅读 · 0 评论 -
3种方法求解斐波那契数列
原文地址:http://www.cnblogs.com/python27/archive/2011/11/25/2261980.html3种方法求解斐波那契数列题目:定义Fibonacci数列如下:分析1:看到斐波那契数列几乎所有的程序员在第一时间的反应都是“递归”,没错了,作为和汉诺塔一样的经典递归问题,我们几乎毫不犹豫就可以写出如下的代码:转载 2014-01-18 22:08:59 · 1205 阅读 · 0 评论 -
线段树(segment tree)
原文:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html线段树(segment tree)线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中。下图就为一个线段树:(PS:可能你见过线段树的不同表示方式,但是都大同小异,根据自己的需要来建就行。)1.线段树基本转载 2014-02-07 22:45:46 · 1339 阅读 · 0 评论 -
数据结构:线段树
(转载地址:http://blog.csdn.net/wypblog/article/details/8219727)一、线段树基本概念 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为转载 2014-03-05 13:05:24 · 910 阅读 · 0 评论 -
算法复杂度速查表
Know Thy Complexities!Hi there! This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science. When preparing for technical interviews in the past, I fo转载 2013-05-11 18:49:50 · 1357 阅读 · 0 评论 -
Yahoo! Hack Beijing Challenge----Question 1 C语言实现及思路
Given a rational number expressed as A/B where A and B are integers, find the position of Mth occurrence of digit D (0-9) after decimal point. For example 3/7 = 0.4285714285... (A=3, B=7), so the 2nd原创 2013-05-10 22:39:54 · 1785 阅读 · 0 评论 -
算法时间复杂度的计算 [整理]
基本的计算步骤 时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。根据定义,可以归纳转载 2013-04-24 23:39:25 · 1408 阅读 · 0 评论 -
KMP算法详解
相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 经过七八个小时地仔细研究,终于感觉自己能说出其所以然了,又觉得数据结构书上写得过于简洁,不易于初学者接受,于是决定把自己的理解拿出来与大家分享,希望能抛砖引玉,这便是Bill写这篇文章想要转载 2013-04-24 23:43:51 · 877 阅读 · 0 评论 -
KMP算法深度解析
摘要:KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用。大道至简,KMP算法非常简洁,然而,其内部却蕴含着玄妙的理论,以至许多人知其然而不知其所以然。本文旨在解开KMP算法的内部玄妙所在,希望能够有助于学习与理解。 1、KMP算法 一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为转载 2013-04-24 23:45:48 · 1041 阅读 · 0 评论 -
六之再续:KMP算法之总结篇(12.09修订,必懂KMP)
六之再续:KMP算法之总结篇(必懂KMP)作者:July。出处:http://blog.csdn.net/v_JULY_v/。引记 此前一天,一位MS的朋友邀我一起去与他讨论快速排序,红黑树,字典树,B树、后缀树,包括KMP算法,唯独在讲解KMP算法的时候,言语磕磕碰碰,我想,原因有二:1、博客内的东西不常回顾,忘了不少;2、便是我对K转载 2013-04-24 23:51:21 · 1293 阅读 · 0 评论 -
最短路径算法——Dijkstra算法
最短路径算法——Dijkstra算法 Dijkstra 算法在刚开始在学数据结构的时候,完全没弄明白,主要是也不怎么想去弄明白。而从学校出来到现在,最短路径算法都没有实际运用过,最近在一个GIS项目中总算用到了,于是乎把教材重温了下,同时查阅了网上一些资料,借鉴了一些别人的东西,并顺利用写进了项目中,文中的主要代码来自于园子里的一位大哥,这位大哥对通用框架的研究很深入,他的链接为转载 2013-04-25 00:05:18 · 1270 阅读 · 0 评论 -
Floyd算法的证明
Floyd算法的证明Floyd算法求每个点间的最短路径:void floyd(){for(k=0;k for(i=0;i for(j=0;j A[i][j]=min(A[i][j],A[i][k]+A[k][j]);}设有n的结点,Ak(i,j)为从i到j但不经过索引大于k的结点的最短路径长度.转载 2013-04-24 23:27:49 · 2736 阅读 · 0 评论 -
求二叉树中两结点的最小公共祖先
求二叉树中两结点的最小公共祖先Part 10 of 15 in the series 常见面试算法题据说这是微软的一道面试题,谁知道呢。问题描述:找出二叉树上任意两个指定结点的最近共同父结点(LCA,Least Common Ancestor)。这算不上是一道算法题了,主要还是看数据结构基本知识和编程能力。首先考虑最简单的情况——二叉树结点数据结转载 2013-04-24 23:32:45 · 2119 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配的KMP算法作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常转载 2013-05-04 20:19:43 · 1059 阅读 · 0 评论 -
网络流:最大流,最小割 基本概念及算法
最大流、最小割定理(Maximum Flow, Minimum Cut Theorem):网络的最大流等于最小割。We will assume that we are in the situation in which no augmenting path in the network has been found. Let's color in yellow, like in the fig转载 2014-03-25 19:28:40 · 38616 阅读 · 6 评论