摘要: 对于这个问题,首先按照《编程之美》中的分析对这个问题进行一定的简化。从2n个数中找n个元素,有三种可能:大于Sum/2,小于Sum/2以及等于Sum/2。而大于Sum/2与小于等于Sum/2没区别,故可以只考虑小于等于Sum/2的情况。动态规划第一步,分析子问题:这里我们用一个三维数组F[][][]表示子问题,F[i][j][k]表示前i个元素中选取j个元素,使得其和不超过k且最接近k。这个子问题可以根据第i个元素是否选择来进行分析:如果我们想回溯找到一组合理的分割方式,那么在子问题的求解过程中,就要记录有效的路径,这样我们再用一个三维数组path[][][]来记录。伪代码如下所示: 1 F[ 阅读全文
posted @ 2013-05-27 12:39 ITeed 阅读(739) 评论(0) 推荐(0) 编辑
摘要: 计算字符串的相似度,这个问题是《编程之美》中的一个经典问题,问题的解决其实应该使用动态规划来解决,在《编程之美》中其实已经给出了该问题的子问题,不过最终用了递归的方法来实现,这使得算法有许许多多的重复计算,算法的复杂度达到了指数级。本文对该问题重新分析,用动态规划的方法来实现,是复杂度降为O(m*n)(其中m、n分别为两个字符串的长度)。对于一个动态规划问题,那么解决这个问题的第一步就是找到子问题。这里利用《编程之美》中的分析方法:不难看出,两个字符串的距离肯定不超过它们的长度之和(我们可以通过删除操作把两个串都转化为空串)。虽然这个结论对结果没有帮助,但至少可以知道,任意两个字符串的距离都是 阅读全文
posted @ 2013-05-27 09:25 ITeed 阅读(664) 评论(0) 推荐(0) 编辑
摘要: 之前学习了动态规划中最基本的问题,最长公共子序列,具体解法,见前前一篇博客:http://www.cnblogs.com/liyukuneed/archive/2013/05/22/3090597.html本篇博客要继续解决一个升级的问题——最长递增子序列问题定义:给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法一:最长公共子序列法:仔细思考上面的问题,其实可以把上面的问题转化为求最长公共子序列的问题。原数组为A{5, 6, 7, 阅读全文
posted @ 2013-05-26 22:32 ITeed 阅读(19540) 评论(2) 推荐(0) 编辑
摘要: 最长公共子序列是一个很经典的动态规划问题,最近正在学习动态规划,所以拿来这里再整理一下。这个问题在《算法导论》中作为讲动态规划算法的例题出现。动态规划,众所周知,第一步就是找子问题,也就是把一个大的问题分解成子问题。这里我们设两个字符串A、B,A = "a0, a1, a2, ..., am-1",B = "b0, b1, b2, ..., bn-1"。(1)如果am-1 == bn-1,则当前最长公共子序列为"a0, a1, ..., am-2"与"b0, b1, ..., bn-2"的最长公共子序列与am-1的 阅读全文
posted @ 2013-05-22 19:57 ITeed 阅读(4111) 评论(0) 推荐(0) 编辑
摘要: 前两天参加了微软实习生招聘的笔试考试,其中有一道题很值得仔细推敲,在这里跟大家做个分享。话不多说,直接上代码,请大家仔细看一下其中的注释! 1 #include <iostream> 2 3 using namespace std; 4 5 class A 6 { 7 public: 8 int a; 9 };10 11 12 class B:public A13 {14 public:15 int b;16 };17 18 19 void setA(A *data, int i)20 {21 data[i].a = 2;22 ... 阅读全文
posted @ 2013-04-08 18:03 ITeed 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 很久之前参加过一次面试,记得当时面试官问过我一个很基础的代码题:实现string类的四大基本函数!一个C++类一般至少有四大函数,即构造函数、拷贝构造函数、析构函数和赋值函数,一般系统都会默认。但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们。在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数。 1 #include <iostream> 2 3 class CString 4 { 5 friend std::ostream & operator<<(std::ostream &, CString &); 6 p 阅读全文
posted @ 2013-04-07 21:09 ITeed 阅读(1614) 评论(0) 推荐(2) 编辑