摘要: 1. 实践题目 7-1 01背包问题 2. 问题描述 给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)。问:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两个选择:装入或不装入。不能将物品 阅读全文
posted @ 2018-12-23 13:07 曾敬 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 一、对回溯算法的理解 回溯法是通过循环或者递归,并加以限制,以达到“穷举和剪枝”的目的。通常按照深度优先来搜索,并不断地回溯再搜索,最终确定解。难点在于如何确定下来搜索的结构以及如何断定是否减枝即确定剪枝函数。 回溯法的基本步骤可总结为: (1)针对所给问题,定义问题的解空间 (2)确定易于搜索的解 阅读全文
posted @ 2018-12-23 12:44 曾敬 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 1、实践题目 最优合并问题 2、问题描述 给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确 阅读全文
posted @ 2018-12-02 09:26 曾敬 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 1.你对贪心算法的理解(2分) 贪心算法是一种局部最优则整体最优的思想,“贪心”的意思就是每次都按某种规则取最优的那个,与动态规划不同的是动态规划往往需要考虑所有子问题的情况从而比较不同的取舍策略来得最优解,而贪心是可以证明存在一种取舍总比其他取舍好从而选择这种策略。 2.请说明汽车加油问题的贪心选 阅读全文
posted @ 2018-12-02 09:15 曾敬 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1.实践题目 7-2 最大子段和 2.问题描述 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。 要求算法的时间复杂度为O(n)。 3.算法描述 首先将数据保存到一 阅读全文
posted @ 2018-11-11 12:31 曾敬 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 1.对动态规划的理解:动态规划中往往伴随着递推、子问题,对于特定问题的解,我们试图去寻找它与规模更小的子问题的关系,然后建立一种递推的数学模型,并且避免子问题被重复计算,以在更小的计算量下完成对问题的解。 2.(1)i个数组成的序列的最长单调递增子序列长度为a[i] a[i] = max ( a[j 阅读全文
posted @ 2018-11-11 12:15 曾敬 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 1. 实践题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A​0​​,A​1​​,⋯,A​N−1​​的中位数指A​(N−1)/2​​的值,即第⌊(N+1)/2⌋个数(A​0​​为第1个数)。 2. 问题描述 即求两个有序序列并集后的中位数,由于两个有序序列并 阅读全文
posted @ 2018-10-14 18:15 曾敬 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 1.二分法可以利用已排序这个已有条件,不断地比较中间的值并由此来缩小范围即缩小问题的规模。并且每次都缩小2倍左右,从而可以得到一个非常理想的时间复杂度。对于二分搜索,值得注意的是2*(n/2)未必为n,以及mid的计算最好是left+(left-right)/2而不是(left+right)/2,因 阅读全文
posted @ 2018-10-14 18:02 曾敬 阅读(90) 评论(0) 推荐(0) 编辑