山东大学项目实训树莓派提升计划二期(十二)book2内容分析与整理

本书深入探讨了Java编程中的数据结构和算法,涵盖线性表、栈、队列、优先队列、排序算法(如插入、冒泡、归并、快速、堆、桶及基数排序)、二叉搜索树和AVL树。此外,还讲解了图的表示与遍历以及加权图的应用,如最小生成树和最短路径算法。最后,介绍了集合流的聚合操作,优化代码性能。
摘要由CSDN通过智能技术生成

在book1中,我们学习了java程序设计的基础,如字符与字符串、循环、数组等;了解并会运用java面向对象程序设计的抽象、封装、继承和多态,提升开发软件的极大灵活性、模块化和可重用性;在第五个实验中运用了JavaFX这个开发Java GUI程序的新框架进行GUI陈虚谷设计。

在book2的内容中,着重介绍数据结构和算法,包括Java集合框架、算法效率的度量、排序算法、线性表、优先队列、二叉树和AVL树等,以下是对书本内容进行的分析和整理。

参考文献:《Java语言程序设计与数据结构(进阶篇)》 梁勇(Y.Daniel Liang)

1.线性表、栈、队列和优先队列

数据结构是以某种形式将数据组织在一起的集合。数据结构不仅存储数据,还支持访问和处理数据的操作。如果具有数据结构的知识,我们就可以编写出更加高效的程序。在面向对象的思想里,数据结构也被认为是一种容器或者容器对象。在之前的博客中我们已经介绍了Arraylist类,本章还讲述了更多能有效地组织和操作数据的数据结构(线性表、向量、栈、队列、优先队列、规则集和映射)。

需要学习的内容如下:

  • 使用Collection接口中定义的通用方法来操作集合。
  • 如何使用ArrayList或LinkList来存储元素线性表。
  • 使用Collections类中的静态工具方法来排序、查找和打乱线性表,以及找出集合的最大元素和最小元素。
  • 区分Vector和ArrayList,然后使用Stack类创建栈。
  • 探索Collection、Queue、LinkList以及PriorityQueue之间的关系,然后使用PriorityQueue类创建优先队列。

2.排序

排序算法展示了许多问题求解的创造性的方法,有助于使用选择语句、循环、方法和数组来练习基本的程序设计计数,且是演示算法性能的极好例子。

本章学习目标:

  • 研究和分析各种排序算法的时间复杂度。
  • 设计、实现和分析插入排序。
  • 设计、实现和分析冒泡排序。
  • 设计、实现和分析归并排序。
  • 设计、实现和分析快速排序。
  • 设计、实现一个二叉堆。
  • 设计、实现和分析堆排序。
  • 设计、实现和分析桶排序、基数排序。
  • 设计、实现和分析针对具有大量数据的文件的外部排序。

3.二叉搜索树

在本章之前介绍了数组线性表和链表的实现,在这些数据结构中,查找、插入和删除操作的时间复杂度是O(n)。在这一章中给出了一种新的数据结构,称为二叉搜索树。它花费O(logn)的平均时间来进行查找、插入和删除元素。

本章中我们需要了解:

  • 设计并实现二叉搜索树。
  • 使用链式数据结构表示二叉树。
  • 在二叉搜索树中查找元素。
  • 在二叉搜索树中插入元素
  • 遍历二叉树中的元素。
  • 从二叉搜索树中删除元素。
  • 使用二叉搜索树实现用于压缩数据的霍夫曼编码。

4.AVL树

由上一章可知,二叉树的查找、插入和删除操作的时间依赖于树的高度。最坏情形下,高度为O(n)。如果一棵树是完全平衡的,即高度是logn,那么搜索的时间就会相应的缩短些。但是维持完全平衡的代价较大,一个妥协的做法是维护一棵良好平衡的树,即每个结点的两个子树的高度基本一样。本章介绍的AVL树正是这样的树。

本章中需要学习的内容如下:

  • 了解什么是AVL树。
  • 理解如何用LL旋转、RR旋转以及LR旋转来重新平衡一棵树。
  • 通过继承BST类设计AVLTree类。
  • 实现树的重新平衡。
  • 从AVL树中删除元素。
  • 分析在AVL树中查找、插入和删除操作的复杂度。

5.图及其应用

图对现实世界的问题的建模和解决非常有用,真实世界的许多问题可以用图算法解决。例如,可以使用图对找寻两座相邻城市之间最小飞行次数的问题进行建模等。

本章学习内容如下:

  • 理解描述图中的术语:顶点、边、简单图、加权/非加权图以及有向/无向图。
  • 使用线性表、边数组、边对象、邻接矩阵和邻接线性表来表示顶点和边。
  • 使用Graph接口和UnweightedGraph类来对图进行建模。
  • 使用UnweightedGraph.SearchTree类来表示对图的遍历。
  • 设计并且实现深度优先搜索。
  • 设计并实现广度优先搜索。
  • 使用深度优先搜索解决连通圆问题。
  • 使用广度优先搜索解决9枚硬币反面的问题。

6.加权图及其应用

如果图的每条边都赋予一个权重,则该图是一个加权图。加权图也有很多实际的应用。

本章我们需要了解:

  • 使用邻接矩阵和临界线性表来表示加权边。
  • 使用继承自UnweightedGraph类的WeightedGraph类来对加权图建模。
  • 设计并实现最小生成树算法。
  • 设计并实现得到单元最短路径的算法。
  • 用最短路径算法来解决甲醛9枚硬币反面的问题。

7.集合流的聚合操作

一个集合流,是一个元素序列。对集合流的操作称为聚合操作,也称为流操作。使用集合操作将细节的实现给了计算机,这使代码变得简洁和简单,此外,可以利用多个处理器并行的执行流上的操作。因此,使用聚合操作编写的代码通常比使用foreach的代码运行的快。

本章的学习目标:

  • 对集合流使用聚合操作来简化代码和提高性能。
  • 在流上创建一个流管道,使用惰性中间方法和终止方法。
  • 创建并行流以实现快速执行。
  • 使用reduce方法将流中的元素减少为单一结果。
  • 使用collect方法将流中元素放入可变集合。
  • 将流中元素分组并对组中的元素使用聚合方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值