Algorithm
文章平均质量分 69
岳飞传
细节之中自有天地,整洁成就卓越代码
展开
-
第一章 算法在计算机中的作用
1.1 算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来原创 2015-03-15 19:16:49 · 1286 阅读 · 0 评论 -
堆排序
1.堆的概念 参考:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html 堆(heap),一种数据结构,堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元原创 2015-05-07 11:21:02 · 830 阅读 · 0 评论 -
全排列算法
全排列算法标签(空格分隔): OJ_算法 全排列在很多程序都有应用,是一个很常见的算法,常规的算法是一种递归的算法,这种算法的得到基于以下的分析思路。 给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。1. 递归实现例如,如果集合是{a,b,c},那么这个集合中元素的所有排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b原创 2015-12-31 17:48:53 · 705 阅读 · 0 评论 -
火车进站
题目描述: 描述 给定一个正整数N代表火车数量,0 < N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。 知识点 栈 输出 有多组测试用例,每一组第一行输入一个正整数N(0< N<10),第二行包括N个正整数,范围为1到9。 输出 输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具原创 2016-03-23 20:15:54 · 1587 阅读 · 0 评论 -
扑克牌大小
扑克牌大小标签(空格分隔): OJ_算法1. 题目描述1.1 描述:扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用”-“连接,每手牌的每张牌以空格分隔,”-“原创 2016-03-23 23:22:38 · 787 阅读 · 0 评论 -
大数求和
大数求和标签(空格分隔): OJ_算法题目二[大数求和]描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B;题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。输出: 以字符串形式,原创 2016-04-16 09:19:37 · 1049 阅读 · 0 评论 -
整数分割
整数分割标签(空格分隔): OJ_算法整数分隔 描述: 一个整数总可以拆分为2的幂的和,例如:7=1+2+47=1+2+2+27=1+1+1+47=1+1+1+2+27=1+1+1+1+1+27=1+1+1+1+1+1+1总共有六种不同的拆分方式。再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。用f(n)表示n的不同拆分的种数,例如f(7原创 2016-04-29 11:45:40 · 732 阅读 · 0 评论 -
数字基root
数字基root标签(空格分隔): OJ_算法描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复;题目类别: 数组 难度: 初级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 输入任意一个或多个整数输出: 输出各位数字之和,直到和为个位数为止(输入异常,则返回-1)多行,每行对应一个输入数据的结果。样例输入:原创 2016-04-19 10:07:51 · 479 阅读 · 0 评论 -
最大公约数和最小公倍数
最大公约数和最小公倍数标签(空格分隔): OJ_算法https://www.zybuluo.com/mdeditor#3774071. 基本概念最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数2.求最原创 2016-05-14 15:21:28 · 841 阅读 · 0 评论 -
素数判断
问题:求出所有小于等于n的素数素数判断方法:方法1:原理:一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)–n的开方; 方案:使用循环解决; 时间复杂度:o(n*sqrt(n)) 当n很大时很耗时;void PrimeNumber(int n, int* primer, int& primer_num){primer_num = 0;int sqrt_i, i, j;fo原创 2016-05-17 20:05:28 · 711 阅读 · 0 评论 -
图的深度优先搜索算法DFS
1.问题描述与理解 深度优先搜索(Depth First Search,DFS)所遵循的策略,如同其名称所云,是在图中尽可能“更深”地进行搜索。在深度优先搜索中,对最新发现的顶点v若此顶点尚有未探索过从其出发的边就探索之。当v的所有边都被探索过,搜索“回溯”到从其出发发现顶点v的顶点。此过程继续直至发现所有从源点可达的顶点。若图中还有未发现的顶点,则以其中之一为新的源点重复搜索,直至所有的原创 2015-07-10 16:51:14 · 1261 阅读 · 0 评论 -
图的搜索算法之广度优先搜索
图的邻接表表示对图(有向或无向)G=<V,E>(为方便记,假定V=1,2,…,n)G=<V, E>(为方便记,假定V={1, 2, …, n}),其邻接表表示是一个由|V|个链表组成数组,对每个u∈Vu ∈ V,链表Adj[u]称为对应顶点u的邻接表。它包含G中所有与u相邻的顶点。每个邻接表中顶点通常是按任意顺序存放的。 无向图的邻接表表示 有向图的邻接表表示广度原创 2015-07-10 16:32:03 · 1853 阅读 · 0 评论 -
基于二叉树的优先队列
简介 优先队列:指队列中的元素都被指派一个优先级,元素按优先级最大(最小)出队,存储堆的数组的第一个元素就是最大的(或最小的)。所以用堆作为优先队列的元素载体是合适的。 队列有两个基本操作:1.入队2.出队。 队列的特点是先进先出。通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西。但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取原创 2015-05-08 19:39:14 · 960 阅读 · 0 评论 -
记表备查-----动态规划算法
1.最优子结构 •组合优化问题,指的是问题有多个可行解,每一个可行解对应一个目标值,目的是要在可行解中求得目标值最优者(最大或最小)。 •最优子结构特性指的是问题的最优解包含的子问题的解相对于子问题而言也是最优的。 2.子问题重叠 •问题的一个递归算法在每个递归步骤产生分支子问题时并不总是新的,而是对部分子问题解了又解。当一个递归算法一次又一次地访问同一个子问题时,我们说该最优化问题具有重叠原创 2015-05-10 11:44:50 · 829 阅读 · 0 评论 -
矩阵链乘法
矩阵链乘法 •给定一个由n个矩阵构成矩阵序列(链)<A1, A2, ..., An>,要将它们相乘(假定它们按此序列是乘法相容的:Ai是pi-1×pi矩阵,而Ai+1是pi×pi+1矩阵),计算积: A1A2 ... An•只要对此序列加上括号,确定运算顺序,就可以算得它们的积。矩阵链的积称为是完全加括号的,若它或是单一的矩阵,或是两个完全加括号的矩阵子链之积,并用一对括号括起原创 2015-05-11 17:13:21 · 935 阅读 · 0 评论 -
汉诺塔递归算法理解及实现
汉诺塔:(Hanoi)是一种玩具,如图: ![这里写图片描述] (http://img.blog.csdn.net/20150430225337439) 从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 问题理解与描述: 1.问题的理解与描述 问题的形式化表示为: 输入:圆盘数n,3根细杆原创 2015-05-01 00:22:56 · 20531 阅读 · 0 评论 -
动态规划----最长公共子序列
最长公共子序列 1.问题的理解与描述最长公共子序列(LCS)问题形式化为:输入:序列X = <x1, x2, ..., xm>和Y = <y1, y2, ..., yn>。 输出:X与Y的一个最长公共子序列Z。最优子结构与子问题的重叠 定理3-1(最长公共子序列的最优子结构) 设X = <x1, x2, ..., xm>和Y = <y1, y2, ..., yn>为两个序列,并设Z = <原创 2015-05-12 23:19:23 · 689 阅读 · 0 评论 -
第2章 算法基础-----排序算法
2.1 插入排序(增量法)排序问题: 输入:n个数的一个序列INSERTION-SORT(A)1 for j=2 to A.length key=A[j] //Inset A[j] into the sorted sequence A[1..J-1] i=j-1 while i>0 and A[j]>key原创 2015-04-02 11:50:07 · 476 阅读 · 0 评论 -
贪心算法—活动选择问题
4.1 活动选择问题 1.问题的理解与描述 假定有n个需要使用同一个这样的资源的活动,每次只能有一个活动使用该资源。每一个活动有一个开始时间 si,一个完成时间 fi,其中0 ≤ si < fi < ∞。如果区间[si , fi)和[sj , fj)不相交,活动ai和aj是相容的(即如果si≥ fj 或 sj ≤ fi,ai和aj相容)。活动选择问题是选取一个由相容活动构成的最大集合。 输入:原创 2015-06-01 20:05:45 · 1736 阅读 · 0 评论 -
Floyd Warshall 弗洛伊德算法---最短路径
3.4. 带权有向图中任意两点间的最短路径 1.问题的理解与描述 我们的问题是要找出图G中的每一个顶点到其他所有顶点的距离。此处,顶点i、j间的距离定义为从i出发到j的最短路径长度。这是一个组合优化问题,从i出发到j可能有若干条路径,每条路径都有其长度,目标是找到i到j的最短路径长度。问题形式化为: 输入:表示带权有向图G=<V,E>G=<V, E>的n*n矩阵W。 输出:对任意的i,j∈V原创 2015-05-29 07:14:34 · 1420 阅读 · 0 评论 -
回溯算法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使原创 2015-07-02 15:45:34 · 895 阅读 · 0 评论 -
回溯算法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问...原创 2018-02-13 08:53:47 · 351 阅读 · 0 评论