编程珠玑(第二版)阅读笔记04
第10章 节省空间
使程序变得更加简单,网络传送数据时所需要的时间通常直接与数据的规模呈正比
关键在于简单
简单性可以衍生出功能性、健壮性以及速度和空间
数据空间技术
不存储,重新计算。牺牲更多的运行时间来换取更小的空间。对于许多跨网络运行的程序来说,在数据规模方面我们最关心的是传输数据需要花费的时间。有时我们会采纳“保存、不进行重新传输”的建议,通过本地缓存的方式减少需要传输的数据量。
稀疏数据结构。使用指针来共享大型对象
数据压缩
分配策略
垃圾回收
代码空间技术:函数定义,解释程序,翻译成机器语言
空间开销,空间度量,
折中(有时程序员必须牺牲程序的性能、功能和可维护性以获得内存)
与环境协作,使用适合任务的正确工具
第11章 排序
插入排序,一种简单的快速排序,更好的集中快速排序
第12章 取样问题
解决现有的问题是程序员任务的一部分,另一个也许更重要的部分是做好解决未来问题的准备
编程过程中几个重要步骤:
正确理解锁遇到的问题
提炼出抽象问题
考虑尽可能多的解法
实现一种解决方案
回顾
第13章 搜索
五种表示集合的重要数据结构
有序数组、有序链表、二叉树、箱、位向量
库的作用,空间的重要性,代码调优方法
第14章 堆
二叉树是一个堆
第一个性质是顺序:任何结点的值都小于或等于其子结点的值。
第二个性质是形状:尽可能靠左分布。树中不存在空闲的位置,如果它有N个结点,那么所有结点到根结点的距离都不超过log2N
两个关键函数 siftup siftdown
优先级队列
高效性,形状性质保证了堆中所有结点和根结点之间相差的层数在log2n之内。
正确性,形状和顺序性质是另一种不变式。
抽象性
过程抽象
抽象数据类型
第15章 字符串
散列,平衡树,后缀数组