随笔分类 - 《编程珠玑》学习笔记
《编程珠玑》第2版,作者Jon Bentley,黄倩、钱丽艳译,刘田审校。
摘要:第8章课后的几道题目和解答是这样子的: 10.假设我们想要查找的是总和最接近0的子向量,而不是具有最大总和的子向量。你能设计出的最有效的算法是什么?可以应用哪些算法设计技术?如果我们希望查找总和最接近某一给定实数t的子向量,结果又将怎样? 法一:利用累积表。我们定义cumarr[i]=arr...
阅读全文
摘要:问题是这样子的: 输入是具有n个浮点数的向量x,输出是输入向量的任何子向量中的最大和。 本文部分参考自一博文。 对于这道题,作者给出了总共4种不同方法: 1. 直接解法 最直接的方式是遍历所有可能的连续子向量,用i和j分别表示向量的首元和最后的尾元,k表示真实的尾元: 1 int ma...
阅读全文
摘要:课后习题7是这样子的: 在20世纪60年代早期,Vic Vyssotsky与一个程序员一起工作,该程序员需要转置一个存储在磁带上的4000*4000的矩阵(每条记录的格式相同,为数十个字节)。他的同事最初提出的程序需要运行50个小时。Vyssotsky如何将运行时间减少到半个小时呢? 课后给...
阅读全文
摘要:C题是这样子的: 给定一个英语字典,找出其中的所有变位词集合。例如,“pots”、“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到。 下段分析摘自该书(P16): 解决这个问题的许多方法都出奇地低效和复杂。任何一种考虑单词中所有字母的排列的方法都...
阅读全文
摘要:B题是这样子的: 将一个n元一维向量向左旋转(即循环移位)i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。简单的代码使用一个n元的中间向量在n步内完成该工作。你能否仅使用数十个额外字节的存储空间,在正比于n的时间内完成向量的旋转? 以下题目的解答部分参考自一博...
阅读全文
摘要:A题是这样子的: 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数据——为什么?)。在具有足够内存的情况下,如何解决该问题?如果有几个外部的“临时”文件可用,但是仅有几个字节的内存,又该如何解决该问题? 因为2^32>4...
阅读全文
摘要:1. 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法表示和排序集合? 1)可以使用C语言中的快速排序qsort(参考自cplusplus),具体代码如下: 1 /* qsort example */ 2 #include /* printf */ 3 #include ...
阅读全文
摘要:这个题目类似于第二章的第一问题(A问题),不过在这里,因为我现在正在学习第一章,所以就先列为第一章的内容。 今天天铎来访,刚好问了我一个问题:对于1、2、3...100的数列,缺失了一个整数(例如50),那你用什么方法可以找到缺失的这个数? 我的想法就是上一篇博文提到的位图数据结构。天铎提到...
阅读全文
摘要:作者在文中阐述了从该章实例引出来的一般原理: 正确的问题。明确问题,这场战役就成功了90%。 位图数据结构。该数据结构描述了一个有限定义域内的稠密集合,其中的每一个元素最多出现一次并且没有其他任何数据与该元素相关联。即使这些条件没有完全满足(例如,存在重复元素或额外的数据),也可以用有限定义...
阅读全文

浙公网安备 33010602011771号