随笔分类 - 算法设计与分析
1
摘要:题目描述求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最长递增子序列长度为4,可以是1,2,4,6,也可以是-1,2,4,6。题目分析最长递增子序列(Longest Increasing Subsequence)又叫做最长上升子序列;子序列,正...
阅读全文
摘要:题目描述有两个字符串s1和s2(长度不超过100),求它们的最长公共子序列的长度。例如,s1="abcd";s2="cxbydz"; 最后输出2。题目分析子序列:在给定序列中按照其先后顺序依次取出若干个字符,并将它们排列成一个新的序列,这个序列就被称为给定序列的子序列。最长公共子序列:英文缩写为LC...
阅读全文
摘要:题目描述给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。【举例】arr=[5,10,25,1],aim=0。组成0元的方法有1种,就是所有面值的货币都不用。所以返回1。arr=[5,10...
阅读全文
摘要:《计算机算法设计与分析》(第3版) 王晓东 电子工业出版社递归与分治策略二分搜索算法二路归并排序快速排序动态规划矩阵连乘问题斐波那契数列动态规划其它经典题目见ACM贪心算法最优装载活动安排问题其它可用贪心算法求解的问题回溯法图的m着色问题素数环问题分支限界法装载问题
阅读全文
摘要:该问题是最优装载问题的一个变形。问题描述问题分析算法实现队列式分支限界法在算法的循环体中,首先检测当前扩展结点的左儿子结点是否为可行结点。如果是则将其加入到活结点队列中。然后将其右儿子结点加入到活结点队列中(右儿子结点一定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。活结点队列中的队首元素...
阅读全文
摘要:基本思想分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点(PS:分支)。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃(PS:限界),其余儿子结点被加入活...
阅读全文
摘要:问题描述把从1到n(n>=2)这n个数摆成一个环,要求相邻的两个数的和是一个素数,找出所有满足条件的环。问题分析1> 解向量:2> 解空间树:排列树,(n-1)!个叶子结点3> 剪枝函数:isPrime( x[t-1]+x[t] ),t=2,3,···,n 约束函数算法实现#include #inc...
阅读全文
摘要:问题描述给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可...
阅读全文
摘要:回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。解空间树有子集树和排列树两种。具有剪枝函数的以深度优先方式系统搜索问题解的算法,它适用于解组合数较大的问题。基本思想具有剪枝函数的以深度优先方式系统搜索问题解的算法称为回溯法。回溯法在问题的解空间树中,按深度优先策略,从根结点...
阅读全文
摘要:1. 背包问题注:0-1背包问题不能用贪心算法求解2. 哈夫曼编码3. 单源最短路径Dijkstra算法4. 最小生成树Prim算法:加点法Kruskal算法(克鲁斯卡尔算法):加边法
阅读全文
摘要:关键在于贪心算法可行性的证明。题目描述设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si void GreedySelector(int n, Ty...
阅读全文
摘要:关键是证明可用贪心算法来求解,具体实现简单。题目描述有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。题目分析采用重量最轻者先装的贪心选择策略,贪心算法可行性证明如下:首先证明该问题有一个最优解以贪心选择开始...
阅读全文
摘要:贪心算法和动态规划一样,都适用于求解最优化问题。贪心算法不是对所有问题都能得到整体最优解,可用贪心算法求解的问题需要具有贪心选择性质和最优子结构性质。基本思想贪心算法总是作出在当前看来是最好的选择(即贪心选择)。也就是说贪心算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。...
阅读全文
摘要:问题描述F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)算法实现动态规划实现:#include using namespace std;/** 动态规划?!!* 输入:n = 0,1,2,...* 输出:f(n)*/long fibonacci(unsigned ...
阅读全文
摘要:题目描述给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。题目分析算法实现/** 矩阵连乘积A1A2A3A4A5A6最优计算次序* A1: 30 x 35* A2: 35 x 15*...
阅读全文
摘要:动态规划算法和分治法基本思想类似,但又有不同之处。它适用于求解最优化问题。基本思想动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。注:这类问...
阅读全文
摘要:快速排序是基于分治策略的一种排序算法。题目描述使用快速排序对n个元素进行排序。题目分析快速排序是基于分治策略的一种排序算法。其基本思想为通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,再分别对这两部分记录进行下一趟排序,以达到整个序列有序。算法实现#i...
阅读全文
摘要:hello 你好放松放松发顺丰的说法都是付水电费水电费的说法适当放松的方式水电费水电费水电费时代发生的付水电费水电费水电费地方发送到水电费水电费算法水电费水电费算法速度付水电费速度付水电费水电费算法水电费水电费水电费沙发上地方是水电费水电费水电费水电费算法算法水电费杀毒分水电费杀毒付水电费算法水电费...
阅读全文
摘要:题目描述给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。题目分析二分搜索算法(折半查找法)是运用分治策略的典型例子。满足分治法的4个适用条件。很显然此问题分解出的子问题相互独立,即在a[i]的前面或后面查找x是独立的子问题,因此满足分治法的第四个适用条件。算法实现#...
阅读全文
摘要:hello 你好放松放松发顺丰的说法都是付水电费水电费的说法适当放松的方式水电费水电费水电费时代发生的付水电费水电费水电费地方发送到水电费水电费算法水电费水电费算法速度付水电费速度付水电费水电费算法水电费水电费水电费沙发上地方是水电费水电费水电费水电费算法算法水电费杀毒分水电费杀毒付水电费算法水电费...
阅读全文
1

浙公网安备 33010602011771号