注意总结中只会提及对我自己而言比较重要的知识点,因此只能用于学完之后查漏补缺,不明之处查询。并不能当做此书的学习辅助资料
算法(第四版) 学习总结一
本书的总体结构
第一个重点是数据抽象并定义抽象数据类型以进行模块化编程
第二个重点是学习三种基础的抽象数据类型:背包、栈、队列
第三个是分析各种算法的性能指标。
书中主要包含了基础章节,以及排序、查找、图、字符串等数据类型的相关算法。第六章为背景,讲述其他前沿领域的算法研究。
第一部分细节
- 静态方法。静态方法可以进行封装和重用代码,能够使用独立的模块开发程序,因此之后应该注意方法都去定义为静态。
- 单元测试用例。在P5页进行提出,之前没有了解,似乎就是使用main函数对所写的java文件以及其中的方法进行测试。
- Java中原始数据类型,int是32位,double是64位,字符是16位
- Java运算是使用的中缀表达式。表达式+运算符+表达式
- 类型转换时,会自动转到高级的数据类型。注意强制转换(int/double)时会截断小数,而不是四舍五入。
- Java中数组类型生命创建后数值类型默认0,布尔类型默认false。
- Java数组最后一个元素总是a[a.length-1]
- 注意数组若int[] b=a。这样ab是指向的同一个数组,而没有新开辟新的数组。
- 二维数组创建可以是参差不齐的,double[][] a=new double[M][N];
- 模块化编程。静态方法库实现了模块化编程,我们可以构建多个静态方法库。优点如:缩小调试范围,程序整体很大,每次处理的模块大小适中,很容易改进。
- 单元测试。每个静态方法库都包含一个main函数去测试库中的所有方法。恰当测试方法也具有很大的挑战性。
- 开发用例、测试用例、都是用main函数测试细节或者是对所有代码进行测试。
- API,应用程序编程接口。API的目的是调用和实现分离,调用者不需要知道细节以及考虑特殊的应用场景
- string与数字之间转换。parseInt()、parseDouble()
- Java中的格式化输出。printf(),主要参数有d、f、s。%与符号之间加上数字去截取长度,小数点后表示截取的小数长度。负号表示倒着数。
- 标准输入库中的静态方法API。包括readLine(),readInt()等等P24
- 重定向与管道。有兴趣可以读一读。P24
- Java也含有一个标准绘图库,在P25。有兴趣的可以读一读。
二分查找
二分查找是通过设置两个标志位,从数组的0位到length-1的位置中,找到mid位置比较大小,从而确定key是在比较大的那一半还是比较小的那一半。不断缩小,直到两个标志位重合或者找到mid==key。注意数组应该是有序的。
19. 在本例中给出了一个开发用例,用来测试二分查找是否有效,其实就是用main()函数写了一个例子去做测试。而在测试性能时,一般都是用比较大的文件去测试。并提出了白名单过滤的概念。
展望
在这一节中提出了数据结构在算法中的用处,主要是允许通过模块化编程复用代码,使我们轻易构造多种所谓的链式数据结构,借助他我们能够更加准确的定义面对的算法问题。
答疑部分
- 字节码概念,作用。 虚拟机的概念
- Java允许整型溢出,并返回错误结果。 原始类型以及long的使用
关于课后习题的答案,可以参考此处:
http://download.csdn.net/download/vv___/10244398