
编程珠玑
文章平均质量分 95
JW2020
学生,就读于中国大陆UESTC,哈哈.....编程业余爱好者!
展开
-
第一章 开篇
习题 1. 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合? 由于目前只学习了C和C++,所以只讨论C和C++中具有排序算法的库。对于C,有stdlib.h中的快速排序qsort函数;对于C++,其STL中的algorithm包含的一个排序算法sort函数。#include void qsort( void *buf, size_t num, s原创 2011-11-10 17:23:37 · 1281 阅读 · 0 评论 -
第二章 啊哈!算法
A. 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺少一个这样的数---为什么?)。在具有足够内存的情况下,如何解决该问题?如果有几个外部的“临时”文件可用,但是仅有几百字节的内村,又该如何解决该问题? 因为2^32 大于40亿,所以文件中至少缺失一个整数。我们从表示每个整数的32位的视角来考虑二分搜索,算法的第一趟(最多)读取4原创 2011-12-04 20:43:14 · 5519 阅读 · 2 评论 -
第3章 数据决定程序结构
1. 本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于0.01.有何建议呢?if income tax = 0;else if inc原创 2011-12-28 19:54:26 · 677 阅读 · 0 评论 -
第一章 开篇(2)
习题 5. 那个程序员说他有1MB的可用存储空间,但是我们概要描述的代码需要1.25MB的空间。他可以不费力气的索取到额外的空间。如果1MB空间是严格的边界,你会推荐如何处理呢?你的算法的运行时间又是多少? 用位向量表示10 000 000个整数需要10 000 000个位,10000000 bits = 1.192MB.所以程序员可利用的1MB空间是显然不够的,可以采用两趟算法,第一趟原创 2011-11-14 21:34:00 · 1044 阅读 · 0 评论 -
第4章 编写正确的程序
习题2. 如果原始的二分搜索对你来说太容易了,那么请试试这个演化后的版本:把t在数组x中第一个出现的位置返回给p(如果存在多个t的话,原始的算法会任意返回其中的一个),要求代码对数组元素进行对数次比较(该任务可以在log2(n)次比较之内完成)。算法步骤:1) 按正常的二分查找算法查找t在数组中的位置pos; 2)将查找区间范围缩小为[left, p原创 2012-02-12 20:17:55 · 1490 阅读 · 1 评论 -
第八章 算法设计技术
本章研究的问题及其四种算法://立方算法int cube_algorithm(int arry[], int n){ int maxsofar = 0; for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { int sum = 0; for (int k = i; k <= j; k++)原创 2012-04-09 19:42:40 · 796 阅读 · 0 评论 -
第12章 取样问题
问题:从0~n-1中随机输出m个有序整数。#include #include #include using namespace std;//返回至少30个随机位int bigrand(){ return RAND_MAX * rand() + rand();}//产生[l, u]区间的随机数int randint(int l, int u){ return l +原创 2012-05-05 21:08:46 · 787 阅读 · 0 评论 -
第11章 排序
1. 插入排序----逐步优化提升其性能//循环中使用变量j跟踪被筛选的元素,只要该元素没有前驱(即j>0)且没有到达最终位置(即该元素小于它的前驱)//则循环就交换该元素和它的前驱void InsertSort1(int * pArry, int len){ int i, j; for (i = 1; i < len; i++) { for (j = i; j > 0 &原创 2012-05-03 21:44:56 · 782 阅读 · 0 评论