2012年5月3日

【算法复习二】0-1背包问题总结

摘要: 一 ,问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二,解决方案: 考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。opt[i][v] = max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i]) 解释如下:opt[i-1][v] 表示第i件物品不装入背包中,而opt[i-1][v-c[i]] + w[i] 表示第i件物品装入背包中。花费如下: 时间复... 阅读全文

posted @ 2012-05-03 23:40 小田的专栏 阅读(491) 评论(0) 推荐(0) 编辑

【算法复习二】传统基本算法(分治----残缺棋盘问题)

摘要: •问题描述: 残缺棋盘是一个有2k×2k(k≥1)个方格的棋盘,其中恰有一个方格残缺。如图给出k=1时各种可能的残缺棋盘,其中残缺的方格用阴影表示。• 残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。在此覆盖中要求: 1)两个三格板不能重叠 2)三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。小格子数(2k×2k -1)三格板中小格子数3。所以所需要的三格板总数为(2k×2k -1 )/3。•例如,一个4*4的残缺棋盘2k*2k以k=2时的问题为例,用二分法进行分解,得到的四个k=1的棋盘。但要注意这四个棋盘,并不都是与原问题相似且独立的子问题。 因为当如图 阅读全文

posted @ 2012-05-03 18:51 小田的专栏 阅读(2285) 评论(0) 推荐(0) 编辑

【算法复习二】传统基本算法(迭代、递归、分治)

摘要: 一,迭代与递推 1)迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。迭代算法一般用于数值计算。迭代法应该是我们早已熟悉的算法策略,程序设计语言课程中所学的累加、累乘都是迭代算法策略的基础应用。例如:斐波那契数列 例子:兔子繁殖问题 一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少只兔子。 •问题分析 因为一对兔子从出生后第三个月开始每月生产一对小兔子,则每月新下生的小兔子的对儿数显然由前两个月的小兔子的对儿数决定。则繁殖过... 阅读全文

posted @ 2012-05-03 16:55 小田的专栏 阅读(1209) 评论(1) 推荐(0) 编辑

【算法复习一】常见的算法策略汇总

摘要: 一,概述 算法策略和算法是有区别的,它们是算法设计中的两个方面,算法策略是面向问题的,算法是面向实现的; 但二者又是不可分的,首先是通过算法策略才找出解决问题的算法,其次对于用不同算法求解的问题算法策略是自然不同的。二,算法策略 1)递推策略:“递推法”和贪心算法一样也是由当前问题的逐步解决从而得到整个问题的解,只是依赖的是信息间本身的递推关系,每一步不需要策略参与到算法中,它们更多地用于计算。 2)递归策略:递归法是利用大问题与其子问题间的递归关系来解决问题的。每次找出大问题与小的子问题之间的关系,直到小的子问题很容易解决,再由小的子问题的解导出大问题的解。。例如:... 阅读全文

posted @ 2012-05-03 09:51 小田的专栏 阅读(937) 评论(0) 推荐(0) 编辑

导航