
编程之美
muweiyou
这个作者很懒,什么都没留下…
展开
-
《编程之美》1.4 买书问题 贪心策略
这里讨论的是贪心策略!书中1.4首先给出了一个动态规划版本,我第一次看编程之美的时候,自己一下子也想到了动态规划版本,就没往后看了。书中讲到的动态规划版本此处不再重述。今天重新看了下才知道后面的贪心才是精华。(1)按照正常的思路,我们有了以下贪心策略:购买Y5本5卷(5卷是总数,不是指第5卷),购买Y4-Y5本4卷,购买Y3-Y4本3卷,购买Y3-Y4本3卷,购买Y2-Y3本2卷,购买原创 2012-04-09 15:40:01 · 646 阅读 · 0 评论 -
《编程之美》 3.10 分层遍历二叉树
给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。《编程之美》中有递归和非递归的解法。递归解法的思路是,假设要求访问二叉树中第K层的节点,那么可以把它转换成访问以该二叉树根节点的左右节点为根的两颗左右子树的第K-1层的节点。依次递归下面程序是输出第K层的节点int PrintNodeAtLe转载 2012-09-13 19:46:04 · 728 阅读 · 0 评论 -
用两个队列实现栈
程序员面试精选100题(18)给出了用两个栈实现队列的方法,这种方法不再重述,这里将给出用两个队列实现栈的方法。代码清单如下:#include#include#include#includeusing namespace std;templateclass stack{public: stack(){} ~stack(){} void push(T x); T p原创 2012-09-12 19:54:38 · 657 阅读 · 0 评论 -
《编程之美》 3.8 求二叉树中节点的最大距离
问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。书上的解法书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。情况B: 路径不穿过根节点,而是转载 2012-09-12 20:22:39 · 625 阅读 · 0 评论 -
《编程之美》 2.18 数组分割
一、题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] | 1S(k, k) = {A[1]+A[2]+…+A[k]}S(k, i) = S(转载 2012-09-11 12:10:41 · 814 阅读 · 0 评论 -
《编程之美》 2.19 区间重合判断
解法二的思路:1 排序 O(N*logN) (N为目标区间的个数)2 合并 O(N)3 二分查找 O(k*logN) (k为合并后区间的个数)// 2.19.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;struct ar原创 2012-09-11 14:19:11 · 1550 阅读 · 0 评论 -
《编程之美》 3.3 计算字符串的相似度
许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcd转载 2012-09-11 21:08:01 · 690 阅读 · 0 评论 -
《编程之美》1.1 让CPU占用率曲线听你指挥
这是微软亚洲研究院编写的一本书《编程之美》上的第一个例子。效果是让Windows任务管理器的CPU利用率画出一条正弦曲线。下面是效果图: 一、原理 通过观察,任务管理器里CPU利用率曲线的刷新频率是每秒一次,每次绘制一秒内的平均值,并且和上一个点连起来。如果一秒内0.5秒执行程序,0.5秒休眠,那么这一秒的曲线将位于50%的地方。如果要画出正弦曲线,我们只需要计算出每一秒内曲转载 2012-02-22 14:40:18 · 617 阅读 · 0 评论 -
《编程之美》1.6 饮料供货
1 书中的算法分析在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶、王老吉、咖啡、可口可乐……(当然,还是有很多同事把拿饮料当做第二件事)。管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度。一段时间后,阿姨们已经有了大批的数据。某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶、四瓶王老原创 2012-04-10 13:11:59 · 1477 阅读 · 0 评论 -
《编程之美》1.7 光影切割问题
由上图可知:两条直线最多一个交点,将平面分成了4个区域;三条直线最多三个交点,将平面分成了7个区域;可以推出:N条直线 M个交点,区域数为N+M+1。可以推出:每增加一条直线,如果增加m个交点,那么这条直线被新增加的m个交点,分成(m+1)段。每一段又会将原来的一个区域分成两块,因此,新增加了(m+1)个新区域。增加第N+1条直线时,最多与前面N条直线全部相交,增加n个交点。因此,转载 2012-04-11 11:50:20 · 942 阅读 · 0 评论 -
《编程之美》 4.11 扫雷游戏的概率
实验室的峰哥近来在找工作之余经常翻看一本叫做编程之美的算法习题集. 昨天等班车时顺手拿来浏览, 看到最后一题“挖雷游戏的概率”没附答案, 却有一则脚注云“此题适合MATLAB用户解答”, 颇感有趣. 题目说, 一局16×16的扫雷游戏刚开始, 只翻开了两格, 分别显示数字1和2, 如下图所示(只画出了3×5的局部示意图). 设地雷总数从10逐渐增加到240, 请分别作出图中A, B, C三处为转载 2012-09-15 16:21:37 · 1858 阅读 · 1 评论