经典算法
woniu317
开始刷leetCode,补充基础。个人邮箱:woniu317@126.com
展开
-
Fibonacci 数列
背景知识:Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibo原创 2013-08-22 19:17:16 · 634 阅读 · 0 评论 -
等价结点
在图数据处理时,若将其中等价结点找出归为一个结点会降低图的规模且加快一些图处理的速度,例如模式匹配、可达性等。本文描述了一种快速求解等价结点的方法。原创 2014-12-05 17:35:30 · 1041 阅读 · 0 评论 -
将一个整数划分为多个正整数之和
将一个整数划分为数个整数之和的划分方式求解,详细描述了该递归过程。原创 2014-09-13 11:31:50 · 7010 阅读 · 0 评论 -
树状数组
1. 定义给定序列(数列)A,我们设一个数组C满足C[i] = A[i–2k+ 1] + … + A[i],其中,k为i在二进制下末尾0的个数,i从1开始算,则称C为树状数组(二进制索引树)。对于给定的i,有三种求解方法:(1) 2k= i&(i^(i-1))(2) 2k= i^(i&(i-1))(3) 2k= i & (-i) (补码性质)2. 用途快速地获取连续原创 2014-04-23 11:58:16 · 790 阅读 · 0 评论 -
强连通分量 的 Kosaraju算法
1. 定义在有向图G中,如果两个顶点vi,vj有一条从vi到vj的有向路径,同时还有一条从vj到vi的路径,则称两个顶点强连通。如果有向图G中的每对顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。2. 求解 (1) 按照深度优先(DFS)遍历图G。遍历时图中每个顶点获得一个记录“x/y”,其中x表示第一次访问到该顶点时的序号,y表示从该顶点离开时的序号。(原创 2014-04-14 09:52:37 · 2557 阅读 · 0 评论 -
双向迪杰斯特拉
1. 问题定义已知:图G=(V, E),其中V表示顶点集,E表示边集。s,t为图G中任意的两个顶点。求:顶点s与t之间的最短路径。最短路径是指从s到t的所有路径中长度最小的那条路径。2. 问题求解2.1迪杰斯特拉迪杰斯特拉按照离原点s的距离从近到远以此扩展的方式寻找最短路径。2.2双向迪杰斯特拉显然若s与t之间的最短路径长度为d,则迪杰斯特拉方法需要搜索一个半径原创 2014-03-10 09:51:38 · 7325 阅读 · 0 评论 -
饮料供货
1. 问题 本题所说的问题是微软每天为员工提供各种不同的饮料,如可乐,酸奶,豆浆,咖啡,绿茶……..(待遇不错啊,呵呵),饮料i的单位容量为Vi,其中每种饮料单个容量都是2的方幂,员工对饮料i的满意度为Hi,冰柜的总容量为V(每天必须装满),问题是如何组合现有的各种饮料,使总的满意度最高。 已知每种饮料的名字、容量、数量以及满意度,求总容量V一定的情况下的最大满意度。2.原创 2014-03-01 12:59:40 · 1316 阅读 · 0 评论 -
素数表+因式分解+完美数
1 素数素数即质数,指在大于1的自然数中,除了1和此整数自身外无法被其它自然数整除的数。1.1 试除法该方法用于验证一个数是否为素数。例求x是否为素数,只需要验证1到中是否存在一个数位x的约数,即能被x整除。1.2 Eratosthenes方法该方法用于高效的求出小于任何数N的所有素数。该方法的原理为先用一个筛子存放所有的数,显然其中最小的为2且为质数,这时可以过滤掉2的任何倍原创 2013-12-16 20:06:26 · 3923 阅读 · 0 评论 -
双色汉诺塔
双色汉诺塔问题:分析:设盘子原来在A柱上,目标为B、C柱。显然与单色汉诺塔问题相同为典型的递归问题。将最后的盘子移动的目标步骤为:(1) 除最后两个盘子外,将所有的盘子移动到C;(2) 将最后的两个盘子移动到B;(3) 再将C上所有的盘子移动到A;(4) 最后将B上的一个盘子移动C。 易得移动出最后两个盘子以外,可以将大小相同颜色不同的盘原创 2013-12-11 21:44:33 · 3534 阅读 · 0 评论 -
完全二叉树中结点祖先后代关系判断
求:一棵完全二叉树中两个结点u和v是否具有祖先后代关系?分析:树的深度由根所在层从0开始,例如结点a的深度为0,结点c的深度为2。树总的深度为D。解:方法一:对节点进行二进制编码。若u结点是v结点的祖先,则v结点则必遗传u结点的标识。定义结点u的标识为其右边第一个非零位的左边所有位。例图中结点b的二进制为“0000 0100”,右边第一个为0的是第三位,则结点u的标识“0000 0原创 2013-11-13 21:35:17 · 3938 阅读 · 0 评论 -
生命游戏
问题描述生命游戏中,对于任意细胞有两种状态,即存活或死亡,而且每个细胞与以自身为中心的周围八格细胞产生互动。规则如下:当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。当前细胞为存活状态时,当周围有2个或3个存活细胞时,该细胞保持原样。当前细胞为存活状态时,当周围有3个以原创 2013-11-27 20:19:03 · 1338 阅读 · 0 评论 -
八枚银币
现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币比真币较轻或较重。分析:首先将八枚银币分为abc、def和gh三组:(1) 如果abc = def,则g或h为假币,两步即可得到结果。(2) 如果abc〉def,则接下来比较ad与bfa) 如果ad = bf,则假币为c原创 2013-11-26 20:56:02 · 1000 阅读 · 0 评论 -
八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。用一原创 2013-11-25 21:36:20 · 703 阅读 · 0 评论 -
河内之塔
背景知识: 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市; 1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将原创 2013-08-17 13:12:25 · 834 阅读 · 0 评论 -
巴斯卡(Pascal)三角形
背景知识 巴斯卡是十七世纪的一位法国数学家,也是历史上第一位发明了加法计算机的人!他造出“巴斯卡三角形”的方法是这样的:先在纸上写出一行和一列的“ 1 “ ,然后在各个位置中填入数字,每一个位置上的数字都是它上面一个数和左边一个数的和。接下来,把这个表右转45 °,放正就得到上面的数字三角形了。 现在的数学书里,都把这个三角形称为“巴斯卡三原创 2013-08-24 11:30:14 · 2223 阅读 · 0 评论 -
枚举集合划分方案
1. 题目 有n个互不相同的整数,将其划分成m个均不为空的集合,枚举所有的划分方案。 2. 分析 (1)该问题明显不同于整数划分问题(http://blog.csdn.net/woniu317/article/details/39250403 ),整数划分问题等价于划分有n个元素集合的方案总数,且集合中的元素相同,因为若不同即使个数相同划分方案也为不同。 (2) 易得该问题属于典型的回溯问题原创 2015-03-15 22:15:08 · 1292 阅读 · 0 评论