算法设计与分析
boomchenchen
好好学习,天天向上。
展开
-
动态规划表格法详细解析01背包问题
3.8 0-1背包问题(Knapsack problem)前言:麻烦转载注明出处哦。3.8.1 问题描述其中每种物品只有1件,存放哪些物品,才能使背包存放物品价值最高?3.8.2 算法思路假设背包空间只有1kg、2kg…5kg,假设可装物品只有1种、2种…4种,按照这种思想,我们可以得出下面这张表。要填写这张表,首先要知道每个空格之间的依赖关系。以下图的最后一张表为例:当剩余空间为3kg,剩余商品为1号(2kg,12元)、2号 (1kg,10元),此时,我们有两种选择:第一种,选择不放原创 2020-08-15 16:06:45 · 4215 阅读 · 0 评论 -
动态规划表格法矩阵连乘问题(含填表详细过程及说明)
3.7 矩阵连乘(Matrix chain multiplication)3.7.1 问题描述求多个矩阵连乘的最优次序,使得所需的乘法次数最少,并求出所需的乘法次数。3.7.2 算法思路跟以往的动态规划解题思路相同,要求A1~A5的连乘,就先求A1A2的,再求A1A2A3的…我们需要填写下列这张表,它记录了每个子问题的值按照上图的填写思路,我们最终填完所有的表,即下图的左表。而下图的右侧表格代表的是括号的位置,比如我们在填(A1,A3)这格时,发现橙色的,也就是A1(A2A3)的乘法次数最少原创 2020-08-15 16:02:31 · 3059 阅读 · 0 评论 -
动态规划解决最短路径问题
3.6 最短路径3.6.1 问题描述最短路径问题(Shortest path problem):再不回退的前提下,找到A到F的最短路径3.6.2 算法思路A到B1的最短路径为4,前序节点为A;A到B2的最短路径为5,前序节点为A;A到C1的最短路径,我们可以看出,只有B1可以到达C1,所以最短路径为4+2=6,前序节点为B1;A到C2的最短路径,我们可以看出,B1和B2都可以到达C2,其中经过B1的最短路径为4+3=7,经过B2的最短路径为5+8=13,所以A到C2的最短路径为7,前序节点为原创 2020-08-15 16:00:30 · 15869 阅读 · 1 评论 -
动态规划表格法解决最长公共子序列(LCS)问题
3.5 最长公共子序列(LCS)前言:图片是博主自己画的,转载请注明出处哦3.5.1 问题描述最长公共子序列(Longest Common Subseuence,LCS)问题:给定两个字符串,求解它们的最长公共子序列的长度,其中子序列是指:它是由原字符串在不改变字符的相对顺序的情况下,删除某些字符(也可以不删除任何字符)后组成的新字符串。3.5.2 算法思路简单地说,我们要填出下面这张表。我们的目标是求出ABCBDAB和BDCABA的最长公共子序列。根据动态规划的原则,问题分阶段,那么最开始原创 2020-08-15 15:58:06 · 3886 阅读 · 1 评论 -
动态规划表格法和备忘录法解决切木材问题
3.4 切木材问题(Rod-cutting problem)3.4.1 问题描述给一个长度为17的木材,可以切成小段卖出,价格根据小段的长度不同而不同。如何通过切成小段卖出尽可能高的总价钱?3.4.2 算法思路总体思路:① 假如我们只有1米长的木材,那么就直接按1米的价格卖;② 假如我们有2米长木材,那么可以切成两段卖(1+1=2元)或者直接按2米卖(4元),所以两米时我们不切直接卖;③ 假如我们有3米,那么我们可以直接按3米卖(5元),或者切成一段1米和一段2米(1+4=5元),此时,两种方原创 2020-08-15 15:53:10 · 428 阅读 · 0 评论 -
三种算法解决跳跃问题(含动态规划)
3.3 跳跃问题(Jump Game)3.3.1 问题描述给定一个非负整数数组,初始状态你在数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。请判断,你最后是否能够抵达最后一个位置?3.3.2 暴力求解算法思路: 设置一个新数组,遍历原数组,把元素能到达的位置都在新数组里标为1,最后看最后一位是否为1。算法实现public boolean canJump(int[] nums){ int [] reachable=new int [nums.length]; reacha原创 2020-08-15 15:50:39 · 3324 阅读 · 1 评论 -
动态规划解决最大子串求和问题
3.1 算法介绍3.1.1 动态规划特性问题分阶段:一个问题的求解可以拆分成若干个阶段的子问题阶段有依赖:问题的最优解依赖于子阶段问题的最优解问题有重复:一个问题的求解过程中,其子问题可能会重复出现3.1.2 表格法特点适用情形方向求出所有解要求所有解的情形自下而上3.1.3 备忘录法特点适用情形方向实现方法只求出所需解无需求出所有解的情况自上而下递归3.2 最大子串和(Maximum Subarray)3.2.1原创 2020-08-15 15:47:15 · 577 阅读 · 0 评论 -
分治法解决赛程安排问题
2.8 赛程安排2.8.1 问题描述n(n=2k)个选手参赛,设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1个选手各比赛一次;每个选手一天只能比赛一次;循环赛一共进行n-1天。我们需要得出如下这样的的赛程表:2.8.2 算法思路**整体思路:**由赛程表我们可以看出,赛程表分为四大区域,我们要做的是,将左上角的内容复制到右下角左上角的内容加上n/2得到左下角左下角复制到右上角区域不断以2指数倍增大,并不断重复上述步骤,最终填满整张表。2.8.3 代码实现pu原创 2020-08-15 15:44:48 · 1162 阅读 · 0 评论 -
分治法解决快速排序问题的算法思路及代码实现
2.6 快速排序(quick sort)2.6.1 算法思路**整体思路:**随机选一个数,把比它大的数放在它的右边,小的放在左边,那个数所在的位置,就会是它最终排序所在的位置。然后继续排左右两边的数,按这种思路往下递归。**细节步骤:**随机选择的那个数,我们称之为“基准数”。① 设置基准数。随机选择一个数为基准数,把基准数和首元素交换位置② 移动指针。设置左指针和右指针,左指针从左往右移动,一旦找到比基准数大的元素就停下来,然后左指针从右往左移动,一旦找到比基准数小的元素就停下来,然后把它俩原创 2020-08-15 15:42:26 · 2107 阅读 · 0 评论 -
分治法详解二维最近点对问题
算法设计与分析——分治法:详解二维最近点对问题1 前言2 问题描述3 分治法4 暴力求解4.1 算法思路4.2 时间复杂度分析4.3 代码实现5 分治法求解5.1 算法思路5.1.1 数据预处理5.1.2 划分中轴线5.1.3 求半边最小距离5.1.4 求中间的最小距离5.2 代码实现5.2.1 数据预处理5.2.2 分治法6 执行结果1 前言本博文是我根据算法实验课的作业整理而成,如若有不严...原创 2020-04-14 16:47:31 · 11601 阅读 · 2 评论 -
分治法解决全排列问题及时间复杂度分析
文章目录2.3 排列(Permutation)2.3.1 问题描述2.3.2 问题解决2.3.3 代码实现2.3.4 时间复杂度前言:该篇博客是我《算法设计与分析》课程的期末笔记,将会出一个系列,后续章节请见主页。其他:如果可以的话,请给我关注收藏点赞三连,嘻嘻谢谢,如果不可以的话请告诉我“下次一定”。参考资料:[1]王晓东.算法设计与分析(第三版)[M].北京:清华大学出版社,2014————————————————————————2.3 排列(Permutation)2.3.1 问题描述给原创 2020-06-21 15:00:10 · 2880 阅读 · 1 评论 -
分治法解决汉诺塔问题及时间复杂度分析
文章目录2 递归与分治策略2.1 算法介绍2.2 汉诺塔(Hanoi tower)2.2.1 问题描述2.2.2 问题解决2.2.3 时间复杂度2.2.3 代码实现前言:该篇博客是我《算法设计与分析》课程的期末笔记,将会出一个系列,后续章节请见主页。其他:如果可以的话,请给我关注收藏点赞三连,嘻嘻谢谢,如果不可以的话请告诉我“下次一定”。参考资料:[1]王晓东.算法设计与分析(第三版)[M].北京:清华大学出版社,2014————————————————————————2 递归与分治策略2.1原创 2020-06-21 11:24:40 · 3525 阅读 · 0 评论 -
算法导论及时间复杂度介绍
文章目录1 导学1.1 算法的基本概念1.2 算法复杂度1.2.1 时间复杂度1.3 算法思维1 导学1.1 算法的基本概念算法设计模式:暴力求解(Brute force)分治法(Divide and conquer)贪婪算法(Greedy approach)动态规划(Backtracking)回溯法(Branch and bound)分支界限法(Randomized algorithm)等算法:算法是借助计算机解决问题的方法,是有限条确定性指令的序列算法的性质:输入、输出、确定性原创 2020-06-20 11:24:06 · 583 阅读 · 0 评论