摘要: 前5章涵盖了编写一个程序解决问题的全部过程,接下来几章都是从程序性能入手,描述程序效率。1.计算机系统的设计层面 问题定义:分析问题,确定已知信息和最终目标; 系统结构:将问题分解为模块; 算法和数据结构:对相应模块选择合适算法; 代码调优:某些算法实现上进行局部改进; 系统软件:考虑我们解决问题的平台;(是否需要并行等) 硬件:选择更好的硬件。2.原理总结 当程序性能问题无法回避时, 如果仅需要较小加速,只在最佳层面上改进; 如果需要较大加速,对多个层面改进。第7章 粗略估计(没有细看。。。)1.基本技巧:多种方法估计,比较结果;快速检验;经验法则;实践2.性能估计:存储空... 阅读全文
posted @ 2012-09-01 22:52 dandingyy 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 这部分接第四章,讲述对前面的代码进行测试。 这里一直提到名词 脚手架(scaffolding),可以理解为访问目标函数的主函数,用于对目标函数的测试。 待测试的函数是上一篇中提到的bsearch函数。1.测试工具 下面是一个调用bsearch的主函数 1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 5 #define MAX 50 6 8 int main(int argc, char**argv) 9 {10 ifstream fin(argv[1]);11 12 int A[M... 阅读全文
posted @ 2012-09-01 21:33 dandingyy 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 经过前三章,问题定义分析——算法设计——数据结构选择,这部分主要是编写正确的代码(包括伪代码)1.问题:二分搜索这部分一直都以二分搜索为核心进行讲述,自己写的函数如下:template<typename T>int bsearch(T *A, int l, int h, T obj){ if(l > h) return -1; int mid = (l+h)/2; if(A[mid] == obj) return mid; if(A[mid] > obj) return bsearch(A, l, mid-1, obj); ... 阅读全文
posted @ 2012-09-01 19:34 dandingyy 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 这一章主要讨论良好的数据结构对程序的重要影响1.调查程序:问题的关键是决定怎样用数组来存储哪些数据。 格式信函编程:(更像是脚本程序所使用的形式) 对于一段应用较多的程序,只有个别变量与外界输入有关,可以将这些变量以特定的参数来表示,建立一个模板,然后使用特定的发生器来解释这个模板。如: 一个模板(schema)类似如下: Welcome back, $1! we hope you have fun in the holiday with $0 family.It will take $$120. your address: $2 $3 date: $4... 阅读全文
posted @ 2012-09-01 19:29 dandingyy 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 这一章主要讨论算法设计这个主题。1.问题 A:给一个最多含有40亿(设为n)个随机排列的32位整数的顺序文件,找出一个不再文件中的数。(若具有足够内存?若只有几百字节的内存可用?) 首先,2^32 = 4294967296 > 40亿,所以一定缺失数。40亿个数字放入内存,每个四字节(unsigned int),需要(4*10^8)/(8*10^6) = 500MB. B: 将一个n元向量左旋转i个位置,如n=8,i=3,向量abcdefgh旋转为defghabc. C: 给定一个英语词典,找出所有变位词集合,变位词如pots, stop, tops为一组变位词。其中每个单词通过改变其. 阅读全文
posted @ 2012-09-01 19:23 dandingyy 阅读(551) 评论(0) 推荐(0) 编辑