数据结构与算法分析(Java语言描述)学习--第一天

第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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值