黑宝书--数据结构与算法分析 java语言描述 第3版
FromNowOnUntilTheEnd
每日记录
展开
-
1.4--1.5.4 泛型类A<Integer>与接口Interface A<Integer>、自动装箱/拆箱Integer->int、菱形运算符<>、数组协变、通配符?
1.4 面向对象的一个重要目标是对代码重用的支持。1.5 利用java5泛型特性实现泛型构件 1.5.1 简单的泛型类和接口public class GenericMemoryCell{ public AnyType read(){ return storedValue; } public void write(AnyType x) {原创 2018-02-01 15:46:08 · 270 阅读 · 0 评论 -
3.1--3.3.2抽象数据类型ADT、单链表初始化删除插入、Collection接口、Iterator接口的简单介绍
3.1抽象数据类型抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。3.2.1表的简单数组实现在必要的时候扩展一个数组arrint [] arr = new int[10];//扩大该数组int [] newArr = new int[arr.length*2];for(int i=0;i<arr.length;i++){ newArr[...原创 2018-02-22 00:26:14 · 490 阅读 · 0 评论 -
2.4.4运行时间中的对数、Comparable和Comparator区别、折半查找、求最大公约数、幂运算优质求法
2.4.4运行时间中的对数(时间复杂度判断) ① 如果一个算法用常数时间( O(1) ),将问题的大小削减为其一部分(一般是1/2),那么该算法就是O( logN ) ② 如果使用常数时间只是把问题减少一个常数的数量(如将问题减少1),那么该算法就是O(N)a)折半查找( O( logN ) ) 算法分析:首先,假设表中元素是按升序排列原创 2018-02-02 17:24:24 · 194 阅读 · 0 评论 -
2.4.3最大子序列和问题的求解
2.4.3最大子序列和问题的求解最大子序列和:给定一组数字,求出其中某几个数字(文明点叫子序列)加起来的最大和。解法一:穷举法算法思想:算出每个子序列的和,即算出序列中第i个到第j个数的和(j>=i),并进行比较public class Test_2_2 { public static void main(String[] args) { int[] a原创 2018-02-02 16:25:01 · 244 阅读 · 0 评论 -
1.3 递归的四条基本法则
1.3 递归的四条基本法则 ①基准情形:必须总要有某些基准情形,它无须递归就能解出。 ②不断推进:对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。 ③设计法则:假设所以的递归调用都能运行。 ④合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。原创 2018-01-26 15:40:12 · 529 阅读 · 0 评论 -
2.4 时间复杂度的计算、斐波那契数列递归表示及其递归法则
2.4 时间复杂度的计算 法则1--for循环:一个for循环的运行时间至多是该for循环内部那些语句(包括测试)的运行时间乘以迭代的次数 for( 0-->n ) 得出时间复杂度为O(n) 法则2--嵌套的for循环:从里向外分析这些循环。在一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以该组原创 2018-02-02 11:54:11 · 458 阅读 · 0 评论 -
2.1 数学基础、大O表示法、洛必达法则相对增长率、T(N) = O( f(N) )、Ω( g(N) )、Ω( h(N) )、o( p(N) )
2.1 数学基础 ①定义2.1:如果存在正常数 c 和 n0,使得当 N≤cf(N) ,则记为 T(N) = O( f(N) ) 解释:T(N) 的增长率 ≤ f(N) 定义2.2: 如果存在正常数 c 和 n0,使得当 N ≥ cf(N) ,则记为 T(N) = Ω( g(N) ) 解释:T(N) 的增长率 ≥ g(N) 定义2原创 2018-02-02 11:16:25 · 5090 阅读 · 0 评论 -
1.1--选择问题(一维数组中选择第K个最大值:冒泡排序及优化的使用)
第1章 引论1.1 本书讨论的内容 选择问题:一组N个数求其中第K个最大者。 ① 解法1:将这N个数读进一个数组中,再通过某种算法(如冒泡排序),将其以递减顺序排序,然后返回位置K上的元素。 冒泡排序(从后往前): 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最原创 2018-01-18 11:49:47 · 340 阅读 · 0 评论 -
1.5.7--1.5.8类型擦除、泛型的限制和类变量、实例变量、局部变量的区别
1.5.7 类型擦除 泛型类可以由编译器通过所谓的类型擦除过程而转变成非泛型类。这样,编译器就生成一种与泛型类同名的原始类,但是类型参数都被删去了。类型变量由它们的类型限界来代替,当一个具有擦除返回类型的泛型方法被调用的时候,一些特性被自动的插入。如果使用一个泛型类而不带类型参数,那么使用的是原始类。 类型擦除的重要推论:所生成的代码与程序员在泛型之前所写的代码原创 2018-02-01 18:17:23 · 305 阅读 · 0 评论 -
1.5.5--1.5.6泛型static方法和类型限界、implement和extends的区别
1.5.5泛型static方法 编程时候使用特定类型出现以下情况: 1、该特定类型用做返回类型 2、该类型用在多于一个的参数类型中 3、该类型用于声明一个局部变量 必须要声明一种带有若干类型参数的显示泛型方法。 public static boolean contains( AnyType[] arr, AnyTy原创 2018-02-01 17:05:59 · 655 阅读 · 0 评论 -
3.3.3--3.3.5List接口、ArrayList类和LinkedList类和remove方法对LinkedList类的使用和ListIterator接口
3.3.3List接口、ArrayList类和LinkedList类//构造List看ArrayList、LinkedList的运行时间复杂度 public static void makeList(List<Integer> lst,int n) { lst.clear(); for (int i=0;i<n;i++) { //在末端添加项构造List /...原创 2018-02-22 00:30:29 · 236 阅读 · 0 评论