数据结构与算法分析(Java语言描述)学习--第一天
- 第1章 引论
- 本书讨论的内容
- 数学知识复习
- 指数
- 对数
- 级数
- 模运算
- 证明的方法
- 归纳法证明
- 反证法证明
- 递归简论
- 实现泛型构件
- 使用Object表示泛型
- 基本类型的包装
- 使用接口类型表示泛型
- 数组类型的兼容性
- 利用Java5泛型特性实现泛型构件
- 简单的泛型类和接口
- 自动装箱/拆箱
- 菱形运算符
- 带有限制的通配符
- 泛型static方法
- 类型限界
- 类型擦除
- 对于泛型的限制
- 函数对象
- 习题
- 1.5
- 1.6
第1章 引论
本书讨论的内容
对于大量的输入如何估计程序的运行时间,彻底改进程序速度以及确定程序瓶颈的方法。
数学知识复习
指数
对数
级数
模运算
证明的方法
归纳法证明
- 证明基准情形
- 进行归纳假设
反证法证明
通过假设定理不成立,然后证明该假设导致某个已知的性质不成立,从而原假设是错误的。
递归简论
当一个函数用它自己来定义时就称为是递归的。
递归不是循环推理,虽然定义一个方法用的是方法本身,但是我们没有用方法本身定义该方法一个特定的实例。
递归的四条基本法则:
- 基准情形,总要有某些基准情形,无需递归就能解出。
- 不断推进,递归调用朝一种基准情形推进。
- 设计法则,假设所有的递归调用都能运行。
- 合成效益法则,求解一个问题的同一实例时,切勿在不同递归调用中做重复性工作。
实现泛型构件
方法的逻辑关系与对象的类型无关,可以使用泛型方法。
使用Object表示泛型
使用Object这样的超类来实现泛型类。
基本类型的包装
为8种基本类型提供了包装类,每一个包装对象都是不可变的。
使用接口类型表示泛型
只有使用Object类中已有的方法能够表示所执行的操作时,才能使用Object作为泛型类型。
数组类型的兼容性
利用Java5泛型特性实现泛型构件
简单的泛型类和接口
public class GenericMemoryCell<AnyType>
{
···
}
public interface Comparable<AnyType>
{
···
}
自动装箱/拆箱
菱形运算符
带有限制的通配符
泛型及泛型集合不是协变的,但是数组是协变的。
public static double totalArea(Collection<? extends Shape> arr)
{
···
}
泛型static方法
带有若干类型参数的显式泛型方法
public static <AnyType> boolean contains(AnyType [] arr, AnyType x)
{
···
}
类型限界
类型限界在尖括号内指定,指定参数类型必须具有的性质
public static <AnyType extends Comparable<? super AnyType>>...
{
···
}
类型擦除
泛型类可以由编译器通过类型擦除转变成非泛型类。
对于泛型的限制
基本类型不能用作类型参数。
函数对象
一个函数通过将其放在一个对象内部而被传递,这样的对象通常被叫做函数对象。
习题
1.5
编写一种递归方式,返回数N二进制表示中1的个数。
public static int Count(int n)
{
if(n == 1)
return 1;
if(n % 2 == 0)
return Count(n/2);
else
return Count(n/2)+1;
}
1.6
显示String str中的字符的所有排列
public class Permute {
public static void main(String[] args)
{
Permute p = new Permute();
p.permute("abcd");
}
public void permute(String str) {
char[] chars = str.toCharArray();
permute(chars, 0, str.length()-1);
}
private void swap(char[] str, int a, int b) {
if (a == b) {
return;
}
char tempChar = str[a];
str[a] = str[b];
str[b] = tempChar;
}
private void permute(char[] str, int low, int high) {
if(low == high){
System.out.println(str);
return;
}
for(int i = low; i <= high; i++){
swap(str, low, i);
permute(str, low+1, high);
swap(str, i, low);
}
}
}