数据结构与算法分析 第一天
第一章
简单的介绍了.java里面一些基本的知识,还有数学上面基本的数学公式的推到.
可能里面比较难懂的部分应该就是类型擦除问题,边界的订立可能要更加的清楚.
注意 % 模运算是非常耗性能的. 因为 n%10= n-[n/10]*10
java1.5 为什么要出泛型?
- 类型安全
- 消除强制类型转换
- 潜在的性能收益
消除代码中的强制类型转换(使用Object 来作泛型),同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。
这就是泛型所做的工作。 减少出现 ClassCastException的可能.
对于泛型的限制:
- 基本类型:
Object<int>
- instanceof检测:类型转换工作只对原始类型进行.
- static的语境:在泛型类中 static方法和static域均不可引用类的变量 //不太懂.这个的意思
- 泛型类型的实例化
T obj = new T();
- 泛型数组的对象.
T[] arr = new T[10];
- 参数化类型的数组. 下例.
边界的定义
Class MutipleBoundsGenericType<T extends Class & Interface>{},边界与边界之间用"&"分隔(注:类在前,接口在后),当然,根据Java中继承的定义(单继承),所以类只能有一个,但可以有多个接口.
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------
第二天
第二章 算法分析
这章的重点就是
教会我怎么去判断一个程序所需要的时间.就是
时间复杂度的问题.
有好几种表示方式.但是通常都不怎么用,都用一个叫
大O标记法( O(f(n)) ) f(n) 就是一个上界(小于等于 f(n))
然后就要记住几个函数的法则:
- T1(N)+T2(N) = O( f(n)+ g(n) ) 或者 O( max{f(n),g(n)} ) //这里其实可以简单的联想到平时顺序的程序 的复杂度计算.都是用最大
- T1(N) * T2(N)= O(f(N) * g(N))
- 如果T(N)是一个k次多项式,侧T(N)=θ(N^k)
- 对任意常数k, log^kN =O(N) 这样就说明对数增长得非常缓慢.
运行时间的计算 一般法则就是 有多少个for 就是 多少次方 ,同时又多个 就选最大的复杂度作为这个程序的复杂度.
for(int i =0;i< a.length ;i++) //这里是 1+n+n 复杂度为
number += i * i * i; //一共占了4个时间单元(两次乘法,一次加法,一次赋值) 即 4N