云淡风轻
Stay foolish,stay hungry.
摘要: 22.1-5 有向图G = (V, E)的平方图是图G2 = (V, E2),该图满足下列条件:(u, w)属于E2当且仅当v属于V,有(u, v)属于E,且(v, w)属于E。亦即,如果图G中顶点u和w之间存在着一条恰包含两条边的路径时,则G2必包含该边(u, w)。针对图G邻接表和邻接矩阵两种表示,分别写出根据G产生G2的有效算法,并分析所给出算法的运行时间。针对邻接矩阵的算法:void G... 阅读全文
posted @ 2011-12-09 11:53 kevin Lee 阅读(554) 评论(0) 推荐(0)
摘要: 当用邻接矩阵表示时,大多数算法需要的时间都是O(V2)的,但有一些例外。证明:在给定一有向图有向图G的邻接矩阵后,可以在O(V)的时间内确定G中是否含一个“通用的汇(universal sink),即入度为|V|-1,出度为0的顶点。解答:这个题目我琢磨了半天也没有想到O(V)的算法,在国外的论坛上看到了这个题目的解法:http://www.ocf.berkeley.edu/~wwu/cgi-bi... 阅读全文
posted @ 2011-12-09 11:49 kevin Lee 阅读(375) 评论(0) 推荐(0)
摘要: Stewart教授是一家公司总裁的顾问,这家公司计划一个公司聚会。这个公司有一个层次式的结构;也就是说,管理关系形成一棵以总裁为根的树。人事部给每个雇员以喜欢聚会的程度来排名,这是个实数。为了使每个参加者都喜欢这个聚会,总裁不希望一个雇员和他(她)的直接上司同时参加。Stewart教授面对一棵描述公司结构的树,使用了左子女、右兄弟表示法。树中每个结点除了包含指针,还包含雇员的名字和该雇员喜欢聚会的... 阅读全文
posted @ 2011-12-07 22:49 kevin Lee 阅读(908) 评论(0) 推荐(0)
摘要: 考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是n个长度分别l[1], l[2], ..., l[n](以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多M个字符。“整齐度”的标准如下。如果某一行包含从i到j的单词,i0,那么W[i,j]=0,表示最后一行代价不算。最终就是要求c[n]的值。 阅读全文
posted @ 2011-12-07 21:50 kevin Lee 阅读(401) 评论(0) 推荐(0)
摘要: 欧几里德旅行商问题是对平面上给定的n个点的确定一条连接各点的最短闭合旅程的问题。图a给出了一个7个点问题的解。这个问题的一般形式是NP完全的,故其解需要多余多项式的时间。J.L.Bentley建议通过只考虑双调旅程来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到左直至出发点。图b显示了同样的7个点问题的最短双调路线。在这种情况下,多项式时间的算法是可能的。描述一个确... 阅读全文
posted @ 2011-12-06 22:54 kevin Lee 阅读(2386) 评论(0) 推荐(0)
摘要: 问如何将一个二叉树序列化保存到文件,使得文件越小越好.可能的方法:第一种方法:把二叉树按前序和中序遍历一遍,存两次二叉树。第二种方法:将二叉树按左枝为0,右枝为1进行路径编码,那么每个节点都可以表示成,节点信息和路径信息进行永久化。第三种方法:将二叉树变成满二叉树,采用数组存储满二叉树,那么数据index和根据二叉树的节点信息进行永久化。第四种方法:采用一个位图和所有节点信息进行存储,位图上的0代... 阅读全文
posted @ 2011-12-05 20:25 kevin Lee 阅读(312) 评论(0) 推荐(0)
摘要: 假设有s个面额不同的硬币: v[1] Q[i-1][j-k*v[i]]+k){ min= Q[i-1][j-k*v[i]]+k; } } Q[i][j]=min; } } cout=1){ if(Q[i][j]0){ coutQ[j-v[i]]+1){ Q[j]=Q[j-v[i]]+1; T[i][j]=T[i][j-v[i]]+1; } } ... 阅读全文
posted @ 2011-12-05 18:41 kevin Lee 阅读(377) 评论(0) 推荐(0)
摘要: 1,给定一个整数数组,求它的一个最长递增子序列,求出其长度和对应的子序列。要求时间复杂度为O(n^2) (对应算法导论 习题15.4-5)解答:这个算法和求最长递减子序列比较类似。我们定义原始数组为a[1],a[2],...,a[n],定义S[i]为以a[i]结尾的最长递增子序列的长度,那么状态转换函数就为:s[i]=max{s[r]| 1=a[r]}+1。初始情况为s[1]=1,代码如下://求... 阅读全文
posted @ 2011-12-05 17:03 kevin Lee 阅读(4466) 评论(0) 推荐(0)
摘要: 1,假设有n个台阶的楼梯,一个人要上这个楼梯,他每次可以走1个台阶或者2个台阶,问走上这个楼梯的走法总共有多少种?解答:这个题目可以从最简单的办法逐步掌握其规律,比如走上1个台阶总共只有1种走法,而走上2个台阶有两种走法(一种直接走2步,一种走2个一步),我们知道要走上第i个台阶,要么是从第i-1个台阶走一小步到的,要么是从第i-2个台阶走1大步。用F(i)表示走上第i个台阶的走法总数,那么F(1... 阅读全文
posted @ 2011-12-01 11:48 kevin Lee 阅读(493) 评论(0) 推荐(0)
摘要: 问题描述:给定一个大小为n的数组,要求写出一个算法,求出其最长的等差数列的子序列。解答:如果这个数组是无序的话,我们首先要对这个数组进行排序,因为我们很难定义一个无序数组的子问题。排序的时间代价为O(n*logn)定义排序后的数组为a[1],a[2],...,a[n]1,我们先来考虑子序列不连续的情况,定义c[i,j]为以a[i]和a[j]为最后两个元素的最长子序列的长度。c[i,j]=max{c... 阅读全文
posted @ 2011-12-01 11:40 kevin Lee 阅读(1931) 评论(0) 推荐(0)