编程之美
文章平均质量分 78
国境之南Fantasy
Coder
展开
-
《编程之美》一摞烙饼问题详解与纠错
1. 问题描述星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞烙饼就排转载 2012-06-03 00:31:08 · 3863 阅读 · 3 评论 -
《编程之美:分层遍历二叉树》的另外两个实现
from:http://www.cnblogs.com/miloyip/archive/2010/05/12/binary_tree_traversal.html1.问题定义给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。下面是一个例子:输出:12 34 5 6转载 2012-06-19 17:53:43 · 619 阅读 · 0 评论 -
3.10 分层遍历二叉树 扩展问题一、二
书中解法三用数组来对树进行BFS,比较适合在比赛中使用,如果使用队列的话,当数据规模比较大的时候,频繁的进队列,出队列还是很耗时的。 比较经典的“聪明的打字员”一题,就是BFS搜索,但是数据规模比较大,用队列的话很容易超时,参考PKU1184.扩展问题一、二是按深度从下到上遍历二叉树,从左向右或者从右向左。我们可以在开始根节点遍历的时候,每层遍历结束之后,存放一个 NULL 作为层与层转载 2012-06-19 21:41:38 · 961 阅读 · 0 评论 -
编程之美4.3 买票找零
from: http://blog.csdn.net/jeiwt/article/details/5272541 题目描述:假设有2N个人在排队买票,其中有N个人手持50元的钞票,另外有N个人手持100元的钞票,假设开始售票时,售票处没有零钱,问这2N个人有多少种排队方式,不至使售票处出现找不开钱的局面? 题目分析:这题时典型的卡特兰数(Cartal转载 2012-06-23 16:10:32 · 1405 阅读 · 0 评论 -
【编程之美】金刚坐飞机问题
from: http://www.cnblogs.com/python27/archive/2012/04/08/2438009.html题目描述现在有一架飞机要起飞,乘客们正准备按机票号码(1,2,3...,N)一次排队登机。突然来了一只大猩猩(金刚)。他也有机票,但是他插队第一个登上了飞机,然后随意的选择了一个座位坐下了。根据社会的和谐程度,其他的乘客有两转载 2012-06-22 18:00:03 · 1105 阅读 · 0 评论 -
卡特兰数
from: http://baike.baidu.com/view/1163998.htm百科名片卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。目录卡特兰数英文名原转载 2012-06-23 16:39:28 · 1749 阅读 · 0 评论 -
用1 ×2 的瓷砖覆盖8 ×8 的地板,有多少种方式呢?
这个题在POJ上有,地址是:http://acm.pku.edu.cn/JudgeOnline/problem?id=2411以前做过这个题,是用状态DP来做的。大致说下方法,DP需要用到两维,一维表示到达哪一行,另一维表示这一行的状态。用二进制来表示假定方格为N行M列。表示方法如下:f[i][j]。 ---- i表示第i行,j表示该行的二进制状态。而f[i][j]则记录由转载 2012-06-22 23:55:58 · 1936 阅读 · 0 评论 -
编程之美读书笔记_4.5_磁带文件存放优化
from:http://blog.csdn.net/flyinghearts/article/details/5605992对一个已经是最优解的排列,记第 i 个文件的长度为 Li ,被访问概率为 Pi 。如果交换第 i 个和第 i+1 个文件,则平均长度一定不会变小,交换后,访问原第 i 个文件时,要多访问一个原第 i+1文件,长度增加了 Pi *Li+1 ,而访问原第 i+1 个文转载 2012-06-24 16:36:33 · 838 阅读 · 0 评论 -
测试用例实例--三角形用例设计
输入条件有效等价类无效等价类是否三角形的三条边(A>0), (1)(B>0), (2)(C>0), (3)(A+B>C), (4)(B+C>A), (5)(A+C>B), (6)(A≤0), (7)(B≤0), (8)(C≤0), (9)(A+B≤C转载 2012-06-24 17:49:28 · 1304 阅读 · 0 评论 -
重建二叉树(编程之美)
from: http://www.cnblogs.com/ZJUKasuosuo/archive/2012/06/18/2554093.html编程之美3.9:给出前序遍历和中序遍历,重新创建二叉树,后序遍历输出。代码如下:View Code 1 #include 2 #include 3 4 using namespace std;转载 2012-06-19 15:11:18 · 732 阅读 · 0 评论 -
编程之美-3.6-编程判断两个链表是否相交
1. 简述 给出两个链表的头指针,比如h1,h2,判断这两个链表是否相交。这里是为了简化问题,我们假设两个链表不带环。 扩展:如果链表可能有环呢? 扩展:如何求出两个相交链表的相交的第一个节点。2. 分析 这道题,个人感觉理解的还是相对比较清楚完整。主要就是两个问题,问题一,两个链表是否相交,问题二,两个链表如果相交,求得相交第一个节点。转载 2012-06-17 22:04:34 · 760 阅读 · 0 评论 -
3.2电话号码对应英语单词
方法一、 神奇的双重while循环。 注:显然可以利用这种方法,打印出任意一个N维数组的任意组合。 个人理解:此双重循环的关键在于 answer[ ] 数组以及索引 k 。answer[ ] 数组中存放了number[ ]对应的所有可能的单词组合,而索引 k 则负责把所有可能的组合给找出来。初始状态下,answer[ ] 中全为0 ,k 从 n -1 开始,不断向0推进,列举转载 2012-06-16 16:58:55 · 726 阅读 · 0 评论 -
寻找凸包的graham 扫描法
1,点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。 2,凸包最常用的凸包算法是Graham扫描法和Jarvis步进法。 3,Graham扫描法: 首先,找到所有点中最左边的(y坐标最小的),如果y坐标相同,找x坐标最小的. 以这个点为基准求所有点的极角(atan2(y-y0,x-x0)),并按照极角对这些点排序,前述基准点在最前转载 2012-06-11 16:40:09 · 4827 阅读 · 3 评论 -
旋转卡壳算法
旋转卡壳算法 poj2187 poj3608 旋转卡壳可以用于求凸包的直径、宽度,两个不相交凸包间的最大距离和最小距离等。虽然算法的思想不难理解,但是实现起来真的很容易让人“卡壳”。 拿凸包直径(也就是凸包上最远的两点的距离)为例,原始的算法是这样子: Compute the polygon's extreme points in the y d转载 2012-06-11 17:15:55 · 962 阅读 · 0 评论 -
寻找最远点对
在一个实际项目中遇到“寻找最远点对”问题,猛然想起《编程之美》扩展问题提到过,开心地翻出来看,却发现“最近点对”的思路套“最远”貌似不合适。然后开始查文献、做实验,改进算法,困扰半天也发现了不少实际问题,写出来大家参考。最后,算法用到系统中,虽然没有大幅提高遗传算法效率,但是系统评价功能明显比原来快了n倍,可谓酣畅:)找回昔日研究《编程之美》感觉~~问题给定平面上N个点的坐标,找出转载 2012-06-11 17:25:42 · 1061 阅读 · 0 评论 -
2.12快速寻找满足条件的两个数---程序员编程艺术之五
第一节、寻找满足条件的两个数第14题(数组):题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:咱们试着一步一步解决这个问题(注意阐述中数列有序无序的转载 2012-06-12 11:37:04 · 584 阅读 · 0 评论 -
第三章、寻找满足条件的两个或多个数及其扩展
第一节、寻找满足条件的两个数题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:直接穷举,从数组中任意选取两个数,判定它们的和是否为输入的那个数字。此举复杂度为O(N^转载 2012-06-12 13:34:25 · 757 阅读 · 0 评论 -
寻找最远点对
在一个实际项目中遇到“寻找最远点对”问题,猛然想起《编程之美》扩展问题提到过,开心地翻出来看,却发现“最近点对”的思路套“最远”貌似不合适。然后开始查文献、做实验,改进算法,困扰半天也发现了不少实际问题,写出来大家参考。最后,算法用到系统中,虽然没有大幅提高遗传算法效率,但是系统评价功能明显比原来快了n倍,可谓酣畅:)找回昔日研究《编程之美》感觉~~问题给定平面上N个点的坐标,找出转载 2012-06-11 17:25:43 · 1457 阅读 · 0 评论 -
子数组的最大乘积——编程之美2.13
题目:给定一个长度为N的整数数组,只允许用乘法不允许用除法,计算N-1个数组合的乘积最大的一组,并写出算法的时间复杂度。 方法一: 最简单的计算就是把所有N-1个数的组合全找出来,共有C(N, N-1) = N 种情况,所以算法的复杂度为Ο(N2)。方法一#include#include#includeusing namespace std; long转载 2012-06-12 15:15:12 · 917 阅读 · 0 评论 -
《编程之美》2.18——数组分割新思路(包含分类后数组的输出)
-----Edit by ZhuSenlin HDU本文说是《编程之美》2.18新思路,其实也是July的《微软等公司面试100题》上的32题的解法。 两个序列大小均为n,序列元素的值为任一整数,无序;要求通过交换两个序列的元素,使序列a元素之和与序列b的元素之和的差最小(可能存在很多种组合,要求找出其中一种即可)。如序列:1 5 7 8 9和转载 2012-06-13 14:57:27 · 1529 阅读 · 0 评论 -
编程之美——4.11 扫雷游戏的概率
from:实验室的峰哥近来在找工作之余经常翻看一本叫做编程之美的算法习题集. 昨天等班车时顺手拿来浏览, 看到最后一题“挖雷游戏的概率”没附答案, 却有一则脚注云“此题适合MATLAB用户解答”, 颇感有趣. 题目说, 一局16×16的扫雷游戏刚开始, 只翻开了两格, 分别显示数字1和2, 如下图所示(只画出了3×5的局部示意图). 设地雷总数从10逐渐增加到240, 请分转载 2012-06-30 15:53:01 · 6710 阅读 · 4 评论