数据结构与算法
吴帝永
这个作者很懒,什么都没留下…
展开
-
排列组合
输出(1~n)的m排列java实现:public class Test { public void permutation(Listlist,int n,int m){ if(list.size()==m){ System.out.print("["); for(int k:list) Sy原创 2014-10-25 16:09:48 · 297 阅读 · 0 评论 -
动态规划
动态规划的关键是找出一条关系表达式,然后根据该表达式循环或递归。往往需要把一些中间状态保存下来,避免重复计算。数字三角形有一个由正整数组成的三角形,第一行只有一个数,除了最下行之外 每个数的左下方和右下方各有一个数。从第一行的数开始,每次可以往左下或右下走一格,直到走到三角形底端,把沿 途经过的数全部加起来作为得分。如何走,使得这个得分尽量大?如图:原创 2015-08-12 14:15:46 · 669 阅读 · 0 评论 -
图算法
图的基本算法图的表示1、邻接表2、邻接矩阵这两种方法都可表示有向图和无向图,邻接表适合表示稀疏图、邻接矩阵不管有多少条边,它需要的空间都是n*n,所以适合表示稠密图。如果经常需要判断两个给定顶点是否存在边,适合用邻接矩阵,因为邻接表需要从某点出发沿着链表一个个搜看是否找到另一个点,但邻接矩阵可以一下子定位到某个坐标,如[i,j]如果为1表示i与j有边相连。广度优先搜索利用队原创 2015-08-12 14:12:56 · 3426 阅读 · 0 评论 -
字符串匹配
举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?第一个字符串我们称为目标串,第二个的称为模板串。一种很直接的方法是从目标串开始进行与模板串比较,发现不相等时,从目标串的下一位开始再与模板串比较,不过这样效率很低,时间复杂度为O(n*m),n表示目标串长度,m表示模板串长度。比如:原创 2014-10-28 15:33:35 · 411 阅读 · 0 评论 -
树--红黑树
红黑树性质:红黑树是每个节点都带有颜色属性的二叉查找树(有序二叉树),颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树还需满足下面要求:1、节点是红色或黑色。2、根节点是黑色。3、每个叶节点(NIL节点,空节点)是黑色。4、每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点),黑色节点的子节点可以是红色也可以是黑色。5、从任原创 2015-08-12 14:09:04 · 359 阅读 · 0 评论 -
与数字相关算法
丑数问题描述:我们把只包含因子(因子都是质数,合数不叫做因子)2、3、5的数称为丑数,如6、8都是丑数,14不是丑数,因为14包含因子7,习惯上1也是丑数。求出1到1500之间的所有丑数。思路:解法一:逐个判断是不是丑数,时间复杂度比较大从丑数的定义可知,如果一个数是丑数,那么该数一定能被2、3、5整除,故判断一个数m是不是丑数,可以通过执行下面操作来完成:原创 2015-08-12 14:17:25 · 1132 阅读 · 0 评论 -
与数组相关算法
找出递增数组中和为s的两个数问题:已知一个递增排序的数组和一个数字s,在数组中找出两个数,使它们的和正好等于s,找出任意一对便可。思路:普通解法:第一个数从数组的开头开始,然后利用二分法找第二个数,时间复杂度为nlogn,因为第一个数是从头到尾顺序选择的。时间复杂度为n的解法:第一个数从数组的开头开始,第二个数从数组的结尾开始,如果两者的和大于s,则第二个数往前取下一个原创 2015-08-12 14:14:19 · 3296 阅读 · 0 评论 -
斐波那契数列、堆
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144第0项是0,第1项是第一个1。这个数列从第二项开始,每一项都等于前两项之和。在数学上,斐波纳契数列被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)性质:1、斐波那契数列又称黄金分割数列,原因是当n趋于无穷大时,原创 2015-08-12 14:10:03 · 1323 阅读 · 0 评论 -
最长回文子串
回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。比如输入字符串 "google”,由于该字符串里最长的对称子字符串是 "goog”,因此输出4。解法一:分别求以每个字符或每两个字符为中心的回文子串长度,由于子字符串的长度可能是奇数也可能是偶数。长度是奇数的字符串是从只有一个字符的中心向两端延长出来,原创 2015-08-12 14:20:00 · 571 阅读 · 0 评论 -
贪心法
几个简单的例子最优装载问题:给n个物体,第i个物体重量为wi,选择尽量多的物体,使得总重量不超过C。由于目标是物体的数量尽量多,所以装重的没有装轻的划算。只需把所有物体 按重量从小到大排序,依次选择每个物体,直到装不下为止。这就是一种贪心法,因为每次都是选择能装下的最轻的物体,是一种“只顾眼前”的策略。与动态规划中的01背包问题不同。部分背包问题:有n个物体,第i个物体原创 2015-08-12 14:11:38 · 613 阅读 · 0 评论 -
二项树与二项堆
二项树二项树Bk是一种递归定义的有序树。二项树B0只包含一个结点。二项树Bk由两个子树Bk-1连接而成:其中一棵树的根是另一棵树的根的最左孩子。二项树Bk具有以下性质:1)共有2的k次方个结点2)树的高度为k3)在深度i处恰有k的i组合个结点,其中i=0,1,...,k4)根的度数为k,它大于任何其他结点的度数,并且,如果对根的子女从左到右编号为k-1,k-2,...,原创 2015-08-12 14:10:44 · 2745 阅读 · 0 评论 -
递归与分治
1、递归思想:棋盘覆盖问题:有一个*的方格组成的棋盘,恰有一个方格是黑色的,其它为白色,需要用三个方格的L型牌覆盖所有白色方格。黑色方格不能被覆盖, 任两个方格不 能有重叠部分。L型牌如下:解决方法:把棋盘切为四块,则每一块都是 一个的。有黑格子的那一块可以递归解决,其他三块并没有黑格子。循环日程表问题:有n =2k个运动员要进行网球循环赛, 需要设计比赛日原创 2014-10-25 16:06:43 · 439 阅读 · 0 评论 -
八皇后问题-回溯法
8皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。因为不能同行同列,所以每行、每列有且仅有一个棋,思路如下:逐个象棋摆放,第i个象棋摆放在第i行,摆放每个象棋时,从第一列开始,尝试放入,一旦满足放入条件便放入该象棋,然后再放下一个象棋,如果无法放入,则回到第i-1个象棋,从新摆放第i-1个象棋,如果第i原创 2015-08-15 14:06:40 · 384 阅读 · 0 评论