摘要: 1.你对回溯算法的理解 要先建一课解空间树,然后进行深搜,实际上回溯算法就是向下进行遍历,然后到了叶节点或者不满足情况的时候继续回溯进行遍历,因而复杂度在数据大的情况下会很高。在遍历的过程中,我们需要减去不必要遍历的子数,从而降低复杂度。 2.请说明“子集和”问题的解空间结构和约束函数 子集和中有n 阅读全文
posted @ 2018-12-23 15:25 crisp 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目 :工作分配问题 2.问题描述 设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。 3.算法描述 开数组num[i][j]来存数据,将工作i分配给第j个人所需的费用为num[i] 阅读全文
posted @ 2018-12-22 15:34 crisp 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目 7-2 删数问题 2.问题描述 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最小的删数方案。 3.算法描述 在进行一个序列的删数操作,如1234,我们首先最优应该删掉一 阅读全文
posted @ 2018-11-30 14:22 crisp 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 1.你对贪心算法的理解 贪心算法是在每一步的步骤中都要做出局部最优的操作,从而得出迭代出结果。 2.请说明汽车加油问题的贪心选择性质 汽车加油问题的要求是最少加油次数,如果我们要想加油最少,那每次没油到下个目的地的时候加油才是最优策略,因而只要没油的时候count++即可; 3.请说明在本章学习过程 阅读全文
posted @ 2018-11-29 19:21 crisp 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目 数字三角形 2.问题描述 给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。 3.算法描述 最优解就是a[0][0]+最优(a[1][0],a[0][1]);同理,递归从上 阅读全文
posted @ 2018-11-04 15:37 crisp 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1、对动态规划算法的理解: 动态规划是将一个多阶段的问题转化成一系列的单阶段问题,解决的问题的最优解所包含的子问题的解是要最优的。动态规划问题最重要的是能够得出状态转移方程,利用公式来解决一个复杂的问题。 2.第一题和第二题的递归方程式: (1)dp[i]=max(dp[i],dp[j]+1) (2 阅读全文
posted @ 2018-10-28 15:28 crisp 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 给出一串字符,求使该字符串是回文需要添加的最少字符个数。 输入 5 Ab3bd 输出 2 思路 假设串长为n,dp[i][j]表示i到j的字符串需要添加的字符数,i初始为1,j初始为n。此时要是ij相等,那就i++,j--即可。若ij不等,让dp[i][j-1]和dp[i+1][j]中小的+1,这样 阅读全文
posted @ 2018-10-22 20:03 crisp 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目 二分查找 2.问题描述 输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 3.核心代码 4.时间复杂度&空间复杂度 空间复杂度o(1),时间复杂度o(log2n), 阅读全文
posted @ 2018-10-13 23:46 crisp 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 1.二分法是分治思想的一个运用。二分常用在搜索上,二分法常见的例子就是在排序后的队列里进行搜索,设立一个mid坐标,那这样就可以通过与mid的对比来决定在左区间还是在右区间,搜索的过程就是logn级别次数,从而进行了一次简化。同时二分法也可以运用在排序上,例如归并排序,将指定数组一份为二,然后递归操 阅读全文
posted @ 2018-10-08 20:13 crisp 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 原题地址:http://poj.org/problem?id=1804 输入:输入T代表T组数据,每行输入n代表数据的量,然后输入数据。 输出:输出逆序对数。 用树状数组,每次插入一个数就更新一次C数组,即使C[i]+1然后一直向上更新到max。然后sum(i)统计小于等于i的数量,i-sum(i) 阅读全文
posted @ 2018-09-26 12:38 crisp 阅读(286) 评论(0) 推荐(0) 编辑