![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 73
Badtom_sh
博观而约取,厚积而薄发。
展开
-
五大算法之分治法
青蛙问题:一只青蛙每次可以跳2个或者3个台阶,问如果跳1000个台阶总共有多少种跳法?抽象:f(1)=0,f(2)=1,f(3)=1,f(n)=f(n-2)+f(n-3)(当n>3时),求f(1000)思路:要知道f(1000)只需要知道f(998)与f(997),要知道f(998)只需要知道f(996)与f(995)……最后分解到f(1),f(2),f(3),这是已知的,f(1000)就能...原创 2018-04-21 21:27:36 · 250 阅读 · 0 评论 -
五大算法之回溯法
问题:在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。抽象:n后问题等价于在n×n的棋盘上放置n个棋子,任何2个棋子不在同一行或同一列或同一斜线上。思路:要解决N皇后问题,其实就是要解决好怎么放置这n个皇后,每一个皇后与前面的所有皇后不能在同一行、同一列、同一对角线,在这里我们可以以行优先,就是说皇后的行号按顺序递增,只考虑第...原创 2018-04-21 21:27:42 · 269 阅读 · 0 评论 -
五大算法之贪心法
问题:一个旅行者有一个最多能用c公斤的背包,现在有n件物品,每件的重量分别是w1,w2,...,wn,每件的价值分别为v1,v2,...,vn,若每种物品都可无限细分,求旅行者能获得的最大总价值。抽象:组合出价值最大的指定重量的物品。思路:先求出每个物品的价值密度,先放入价值密度最大的物品,再放入剩余物品价值密度最大的物品,依次进行,直到背包已满。代码如下:package test; impo...原创 2018-04-21 21:27:48 · 227 阅读 · 0 评论 -
五大算法之动态规划
问题:一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。抽象:找出这N个数的最长非降子序列的长度。思路:使用动态规划递推法,若d(i)为前i个数的最长非降子序列的长度,那么它依赖于d(1)...d(i-1)的长度,求出d(i),又可往后求出d(i+1)...n。其状态转移方程为:d(i) = max{1, d(j)+1},其中j=1...i-1,A[j]<=A[i...原创 2018-04-22 08:23:43 · 215 阅读 · 0 评论 -
五大算法之分支定界法
问题:有一批共n个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。抽象:将n个物品放到2个容器中,每个容器不能超重,寻找一个可行的方案。思路:先尽可能的将第一艘船装满,然后将剩余的集装箱装到第二艘船上,如果第二艘船装不下则问题无解。则问题转化为求第一艘船最大装载量。使用分支定界法进行解空间搜索。代码如下:pa...原创 2018-04-22 08:23:50 · 14785 阅读 · 0 评论 -
五大算法之分支定界法2——通过剪枝提升效率
上篇博客(五大算法之分支定界法)介绍了使用分支定界法解决装载问题,该算法的时间、空间复杂度均为2^n,这篇博客考虑如何改进该算法,提升效率。每次加入活节点之前,都需要考虑一下当前装载重量加上剩余货物总重量是否大于当前最优解,如果不是的话则表明该分支不可能在产生最优解,可以去除。也即根据这个约束条件进行剪枝。改进后运行w={ 10, 2, 5, 7, 5, 9, 4, 3, 2, 5, 3, 3, ...原创 2018-04-22 08:24:28 · 4353 阅读 · 0 评论