摘要: 1.回溯法的理解: 回溯法实质上就是穷举法,不过加上了约束函数和限界函数,比如有些步骤进行到一半发现结果已经不可能符合条件就舍去,还有些符合条件但是进行到发现这不是最优解的时候就可以舍弃,就是通过这样的方式来将穷举法一步一步优化,回溯法主要两种算法框架,一种是子集树,另一种是排列树。回溯法解题的关键 阅读全文
posted @ 2018-12-24 19:58 RainParrot 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 每个ai都有一个值,里面是选的第几个人或者第几项工作,由于人和工作都是n,人分配给工作,工作分配给工作都一样。 这里用人分配给工作的理解。其实这题的剪枝函数十分简易,就是用count来代表当前的花费,如果c大于当前最优的花费,就剪枝。如果小于就继续,树的深度代表工作编号,x[i]代表这个人有没有被分 阅读全文
posted @ 2018-12-24 19:57 RainParrot 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 1.程序存储问题 2.程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。 3.因为需要尽可能多的存储程序,所以把占用空间最小的程序优先放入,即可得到最多的程序数 4.空间复杂度就是一维 阅读全文
posted @ 2018-12-02 17:37 RainParrot 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1.贪心算法因为比较贴近生活中我们常用的方法,只要找到设计的规律就不困难。 2.在汽车加油问题中,可以按照生活习惯,将一箱油尽可能用完,直到能刚好到下一个油站,这样需要的加油次数最少。 3.算法设计起来比动态规划要容易很多,但是要考虑特殊情况,就还是挺有意思的。作业中的题目也没有遇到太大的困难。 阅读全文
posted @ 2018-12-02 14:37 RainParrot 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目:给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。 2.问题描述:根据题目我们可以用动态规划的方法,分解子问题,由下到上对上面的内容进行填表,不断地求最优子结构最终得到问题 阅读全文
posted @ 2018-11-04 17:06 RainParrot 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 1、 动态规划算法适合用于求解最优解问题,将一个问题分解成若干个子问题,然后再求子问题,类推得出最优解。有自顶而下的备忘录方法和自下而上的填表法。算法设计比较容易,时间复杂度相对比较低。 2、 第一题使用最长公共子序列方法,非递归。 第二题定义f[i][j]为站点i到站点j的最少租金: f[i][j 阅读全文
posted @ 2018-11-04 16:52 RainParrot 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 一开始难以理解递归算法的设计方法。再经过了非常多次的报错后,又在同学的帮助下,慢慢理解的递归算法的设计方法,也就很快解决了二分查找的难点。 其实算法设计并没有想象中的那么难,在以后的算法设计中,要想办法设计出时间及空间复杂度都更低的算法。 阅读全文
posted @ 2018-10-14 12:09 RainParrot 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 一、题目: 7-3 两个有序序列的中位数。 二、问题描述: 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,⋯,AN−1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。 三、算法描述: 首先要对两个等长数组进行重新排序,可 阅读全文
posted @ 2018-10-13 20:34 RainParrot 阅读(132) 评论(0) 推荐(0) 编辑