编程珠玑3

今天晚上,终于把正文像读小说那样读了一遍(附录,习题基本都没看),还是收获了一些内容。现在放在桌面,打算没事就翻一下。不过觉得看这书之前,如果有数据结构和算法的底子会比较好,我显然底子不好,看起来略费劲,但是不可否认这本书真的是一本好书,这本书教给你怎么设计程序 我觉得对程序的优化那几节太精彩了,是精华部分而且据说这本书的内容都是从一些专栏里边整理。能够在一个专栏的篇幅里讲清楚一个有意思的算法问题,功力可见一斑,有些也成为了面试题的原型。每个章节麻雀虽小五脏俱全。既有算法原理,也有项目实践,实乃居家旅行必备佳品。起承转合,行云流水。所谓程序员的自我修养,就是每天都要问自己: CAN WE DO BETTER?

时间: 2024-11-09 01:53:07

编程珠玑3的相关文章

《编程珠玑》高清pdf版

下载地址:网盘下载 作者简介 编辑 Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑,他的"编程珠玑"专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上. 目录 编辑 第一部分 基础 第1章 开篇 1.1 一次友好的对话 1.2 准确的问题描述 1.3 程序设计 1.4

《编程珠玑》笔记:数组循环左移

问题描述:数组元素循环左移,将包含 num_elem 个元素的一维数组 arr[num_elem] 循环左移 rot_dist 位.能否仅使用数十个额外字节的存储空间,在正比于num_elem的时间内完成数组的旋转? 一:Bentley's Juggling Alogrithm 移动变量 arr[0] 到临时变量 tmp,移动 arr[rot_dist] 到 arr[0],arr[2rot_dist] 到 arr[rot_dist],依此类推,直到返回到取 arr[0] 中的元素,此时改为从 t

一维向量旋转算法 编程珠玑 第二章

看了编程珠玑第二章,这里面讲了三道题目,这里说一下第二题,一维向量旋转算法. 题目:将一个n元一维向量(例数组)向左旋转i个位置. 解决方法:书上讲解了5种方法,自己只想起来2种最简单方法(下面讲的前两种). 1.原始方法. 从左向右依次移动一位,对所有数据平移:这样循环i次,算法最坏时间复杂度达n^2.耗时不推荐. 2.空间换时间. 顾名思义,申请一个i长度的空间,把前i半部分放到申请空间中,再把后面的所有数据向左移动i个位置,最后把申请的空间中的数据放到后半部分.浪费空间,不推荐. 3.杂技

编程珠玑字符串反转

编程珠玑真是一本让人感觉到眼前一亮的书,虽然书不厚,但是里面的知识很贴近实际应用,也很有启发性,如果能真正的消化里面的内容,对程序的理解肯定会上一个档次. 本文给出的是第二章习题的第五题的大概程序! #include<iostream> using namespace std; void move(int * arr, int arrsize,int n);//将数组arr的前n个元素左移 void show(int * arr,int arrsize); void reverse(int *

磁盘文件排序 编程珠玑

开始看编程珠玑了,第一个就是进行磁盘排序的问题,想到了也只是归并排序,但题目要求1M内存,这个算法不可行.编程珠玑写到使用位图(分两次操作读写可以成功实现,小于内存1M),详情看编程珠玑第一章. 题目:给定10^7数据,对大数据进行排序.要求内存只有1M,时间可以接受,较短. 解决方法:1.多路归并.2.位图操作. 在这里看了july的文章,写的真心不错.推荐:http://blog.csdn.net/v_JULY_v/article/details/6451990 其中有个生成不同随机数的程序

《编程珠玑》第一章

一.题目: 如何在1MB的空间里面对一千万个整数进行排序?并且每个数都小于1千万.实际上这个需要1.25MB的内存空间(这里所说的空间是考虑用位图表示法时,每一位代表一个数,则1千万/(1024*1024*8) 约为1.25MB  ). 1MB总共有838,8608个可用位.所以估计也可以在1MB左右的空间里面进行排序了. 分析: 1)基于磁盘的归并排序(耗时间) 2)每个号码采用32位整数存储的话,1MB大约可以存储250 000 个号码,需要读取文件40趟才能把全部整数排序.(耗时间) 3)

编程珠玑第二章

编程珠玑第二章 A题 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中一32位整数. 1.在文件中至少存在这样一个数? 2.如果有足够的内存,如何处理? 3.如果内存不足,仅可以用文件来进行处理,如何处理? 答案: 1.32位整数,包括-2146473648~~2146473647,约42亿个整数,而文件中只有40亿个,必然有整数少了. 2.如果采用位数思想来存放,则32位整数最多需要占用43亿个位.约512MB的内存空间. 可以采用前一章的位处理方法.然后判断每个in

《编程珠玑》阅读小记(9) — 取样问题

问题 本章研究的问题是取样问题,也就是程序设计中的随机数,问题描述如下: 程序的输入包含两个整数m和n,其中 m < n:输出是0~n-1范围内m个随机整数的有序列表,不允许重复.从概率的角度看,我们希望没有重复的有序选择,其中每个选择出现的概率相等. 条件假设: 我们假设有一个能返回很大的随机整数(远远大于m 和 n )的函数bigrand(),以及一个能返回i-j范围内均匀选择的随机整数的randint(i,j). 本章关于这个问题提供了三种算法,接下来详细叙述每个算法的程序实现. 算法1

编程珠玑 第 8 章

*/--> pre.src {background-color: Black; color: White;} 编程珠玑 第 8 章 Table of Contents O(n3) O(n2) O(n2) 记忆 O(nlogn) O(n) 求一个整型数组中相邻子向量的最大和 31 -41 59 26 -53 58 97 93 -23 84 O(n3) int maxsofar = 0; for (int i = 0; i < n; i++) { for (int j = i; j < n;

JavaScript 编程珠玑 - 《JavaScript: The good parts》总结(2)

一.扩展函数原型的更好办法: // 定义下面的通用方法 Function.prototype.method = function (name, func) {     this.prototype[name] = func;     return this; }; // 使用上面的通用方法作为工具进行扩展,以免每次扩展都访问Function.prototype.XXX (that's ugly). Number.method('integer', function() {     return