
算法
文章平均质量分 73
枫轩缘
这个作者很懒,什么都没留下…
展开
-
汉诺塔问题(递归)
经典的递归问题:三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。#includeusing namespace std;/** a上的圆盘移动到b上,通过c来辅助 * n表示圆盘的数量 */ int Hanoi(int n,char a,char b原创 2012-11-05 19:33:49 · 1592 阅读 · 0 评论 -
二路归并排序算法(递归&非递归)
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合原创 2012-11-09 14:31:34 · 29754 阅读 · 6 评论 -
二分求幂(pow的logn算法)
二分求幂,最初是在剑指offer上看到,书中给出了递归的代码,后来在王道机试指南上再次看到,那上面给出了非递归的代码。二分求幂的原理如图:剑指offer上的递归代码如下:double powerWithUnsignedExponent(double base,unsigned int exponent){ if(exponent==0) return 1; if(原创 2013-03-30 20:02:54 · 6799 阅读 · 1 评论 -
小白鼠检验毒水问题
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒?答案是2^n>=1000,其中n就是小白鼠的数量。设计方案:给1000个瓶分别标上如下标签(10位长度): 0000000001 (第1瓶) 0000000010 (第2瓶) 0000000011 (第3瓶) ...... 1111原创 2013-10-15 22:22:23 · 6172 阅读 · 0 评论 -
砝码秤重量
Description设有1g 2g 3g 5g 10g 20g的砝码各若干枚(其总重Input有多个测试数据 每个测试数据一行,由6个整数组成,分别是1g 2g 3g 5g 10g 20g砝码的数量 最后一行是0 0 0 0 0 0,不需要处理Output每组测试数据输出一行,输出总共可以称出的重量的数目。Sample Input1 1 1 1 1原创 2013-05-10 22:45:21 · 1235 阅读 · 0 评论 -
最长上升子序列(LIS)&最长公共子序列(LCS)
最长公共上升子序列(LCIS)的O(n^2)算法 见http://blog.youkuaiyun.com/prstaxy/article/details/8881837问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.原创 2013-05-02 10:52:16 · 976 阅读 · 0 评论 -
最长公共上升子序列(LCIS)的O(n^2)算法
写得非常好的一篇文章,来自:http://wenku.baidu.com/view/3e78f223aaea998fcc220ea0.html另外杭电上的hdu 1423 考的就是这个.Greatest Common Increasing Subsequence http://acm.hdu.edu.cn/showproblem.php?pid=1423预备知识:动态规原创 2013-05-03 20:41:07 · 1204 阅读 · 1 评论 -
整数划分问题(递归&非递归)
递归算法:将正整数n表示成一系列正整数之和,n=n1+n2+...+nk,其中n1>=n2>=n3>=...>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数城外正整数n的划分数,记作p(n)。例如,正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2原创 2012-11-05 17:19:39 · 2995 阅读 · 0 评论 -
约瑟夫环的O(n)算法
问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求最后原创 2013-05-06 21:33:11 · 1096 阅读 · 0 评论 -
平衡负载
一、赛题回顾:Du熊正在负责一个大型的项目,目前有K台服务器,有N个任务需要用这K台服务器来完成,所以要把这些任务分成K个部分来完成,在同上台服务器上执行的任务必须是连续的任务,每个任务有各自需要的执行时间。例如N=5,K=2,每个任务需要时间分别为5,3,1,4,7分钟,那么我们可以分成(5)(3 1 4 7)两部分,这样第一台服务器所花时间就是5分钟,而第二台机器需要花15分钟原创 2013-05-05 16:06:27 · 858 阅读 · 0 评论 -
深度优先搜索算法
算法主要思想:深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。DFS函数是算法的核心,递归版的思想是每次访问一个顶点时,先取到该顶点第一条相连的边的(另一端原创 2013-03-27 21:39:40 · 793 阅读 · 0 评论 -
广度优先搜索算法
图的广度优先搜索遍历类似于树的层次遍历。算法主要思想:首先访问起始顶点v,然后选取与v邻接的全部顶点w1,w2……wn进行访问,再依次访问与w1,w2……wn邻接的全部顶点(已经访问过的除外),以此类推,直到所有顶点都被访问为止。算法执行流程如下:(1)任取图中一个顶点访问,入队,并将这个顶点标记为已访问;(2)当队列不空的时候循环执行:出队,依次检查出队顶点的所有邻接顶点,访问没有访问过原创 2013-03-27 21:43:38 · 793 阅读 · 0 评论 -
0-1背包问题(动态规划)
一 问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二 解决方案: 考虑使用动态规划求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。 opt[i][v] =原创 2012-11-15 20:51:33 · 786 阅读 · 0 评论 -
快速排序算法
快速排序(QuickSort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。快速排序采用了基于分治的策略。主要思想:在数组中选取一个枢轴(或称主元,最基本的就是选第一个元素),把小于主元的元素全部放在左边,大于主元的全部放右边(以上即为partition函数),然后再按此方法对主元左边和主元右边的两部分数据(不包含主元!)分别进行快速排序,整个排序过程可以递归进行,以原创 2013-04-03 22:55:59 · 867 阅读 · 0 评论 -
递归输出全部组合数
本文是输出全部的组合数,递归输出全排列可参见:http://blog.youkuaiyun.com/prstaxy/article/details/8147029比如有3个数,1、2、3,则它们的组合有1、2、3、12、13、23、123。当交换2个数字虽然得到2个不同的排列,但却是同一个组合。如果输入n个字符,则这n个字符能构成长度为1的组合、长度为2的组合、....、长度为n的组合。在求n原创 2013-04-01 21:36:11 · 4224 阅读 · 1 评论 -
二分查找算法
二分查找算法前提有2个:1.必须采用顺序存储结构,2.必须按关键字有序排列。时间复杂度为O(logn)。 算法主要思想:将n个元素分成两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。如果考虑到时间效率,代码中最好是将相等的情况放在最后一个判断中,因为相等的概率比大于和小于的概率要小很多,原创 2013-03-01 21:44:53 · 876 阅读 · 0 评论 -
图的邻接表表示
图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。1. 邻接表的结点结构(1)表结点结构 ┌────┬───┐ │adjvex │next │ └────┴───┘ 邻接表中每个表结点均有两个域原创 2013-03-13 15:17:39 · 2848 阅读 · 0 评论 -
矩阵连乘问题(动态规划)
计算三个矩阵连乘{A1,A2,A3},维数分别为10*100 , 100*5 , 5*50按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次所以问题是:如何确定运算顺序,可以使计算量达到最小化。枚举显然不可,如果枚举的话,相当于一个“完全加括号问题”原创 2012-11-10 22:05:03 · 1441 阅读 · 0 评论 -
输出全排列(递归&非递归)
递归算法:假设总共有n个元素,其核心是:将每个元素放到余下n-1个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去。比如:1 2 3首先将1放到最前方(跟第1个元素交换),然后排列余下的2 3,然后将1放回本来位置 结果 1 2 3;1 3 2 其次将2放到最前方(跟第1个元素交换),然后排列余下的1 3,然后将2放回原处结果 2 1 3; 2 3 1原创 2012-11-04 22:59:56 · 17919 阅读 · 5 评论