20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结
第九周学习总结
一、学习目标
二叉查找树的理解
二叉查找树的实现
平衡二叉查找树
哈夫曼树的实现
堆的理解
堆的实现
二、学习内容
1.二叉查找树
思路:
二叉查找树与一般二叉树的区别在于,二叉查找树中保存的都是实现了
Comparable
接口的类型的对象,从而使得在将数据保存至树中的时候,就会进行比较,每次以根结点为分界点,比根结点的值大的元素都会被保存在根结点的右子树,反之被保存在左子树中。这样就使得树在被创建的时候就是已经排序好的,然后我们就可快速的对相应元素进行查找了。
实现:
书上已经帮我们实现好了接口和具体类,我们只需要实现其中没有完成的两个方法findMax
和findMin
。
代码:
public T findMin() {BTNode<T> r = root;while (r.getLeft() != null)r = r.getLeft();return r.getElement();}public T findMax() {BTNode<T> r = root;while (r.getRight() != null)r = r.getRight();return r.getElement();}
测试截图:
2.平衡二叉查找树
优点:
在有n个结点的平衡树中进行查找及添加操作的效率是进行O(log2^n)次比较(最长路径的长度)。树越退化,查找及添加操作的时间复杂度越接近O(n),它低效率使用查找树带来的益处。
3.哈夫曼树
思路:
在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。
实现:
//数据解压缩,将压缩compressed中的0/1序列进行Huffman译码,返回译码字符串
public String decode(String compressed)
{String[]arr = new String[charset.length()];String str ="";for(int i=0;i<arr.length;i++){arr[i] = getCode(i);}ArrayList<Character> list = new ArrayList<>();ArrayList<String> list1 = new ArrayList<>();ArrayList<String> list2 = new ArrayList<>();Map<String,String> map = new HashMap<>();for(int i=0;i<arr.length;i++){map.put(arr[i],((char)('A'+i))+"");}for(int i=0;i<compressed.length();i++) {list.add(compressed.charAt(i));}String temp = "";for(int i=0;i<list.size();i++){temp += list.get(i);if(OP(temp,arr)) {list1.add(temp);temp = "";}}for(String i:list1)list2.add(map.get(i));for(String i:list2)str += i;return str;
}public boolean OP(String msg,String []arr){boolean result = false;for(int i=0;i<arr.length;i++) {result = msg.equals(arr[i]);if(result)break;}return result;
}
测试截图:
4.堆的理解与实现
堆:
首先堆是一颗完全树(完全树是可平衡树,他的最后一层的所有叶节点都在树的最左边),第二是要约束元素之间的关系。树中的根元素总是树中最大的元素,从根开始的每条路径上的值都是越来越小的。
堆的实现:
在书中已经帮我们实现好了大部分代码,我们只需要实现其中的一个获取最大值的方法就可以了。
public T getMax() throws Exception {if (root == null)throw new Exception ("Remove max operation " +"failed. Tree is empty.");T maxElement = root.getElement();if (root.count() == 1)root = last = null;else {HeapNode<T> newLast = ((HeapNode<T>)root).getNewLastNode(last);if (last.parent.left == last)last.parent.left = null;elselast.parent.right = null;root.setElement(last.getElement());last = newLast;}return maxElement;
}
测试截图:
三、结对及互评
本周并没有在结对方面有什么合作项目
点评模板:
- 博客中值得学习的或问题:
- 界面很好看
- 问题分析可以更详细
其他
希望我们结对在这学期能相互促进,技术更上一层楼。本周结对学习情况
- 20162302
- 结对学习内容
- 一起讨论学习。
四.代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 10/20 | 了解数据结构及算法 |
第二周 | 664/664 | 2/3 | 10/20 | 系统的学习了查找和排序 |
第五周 | 1333/1997 | 2/5 | 15/60 | 栈数据结构的学习 |
第七周 | 812/3035 | 2/7 | 15/80 | 树的学习和实现 |
第九周 | 1364/4399 | 2/9 | 15/110 | 二叉查找树、哈夫曼树、堆 |
参考资料
《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导
哈夫曼树
转载于:https://www.cnblogs.com/Zhangxusheng/p/7788136.html
20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结相关推荐
- 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
20162329 2017-2018-1 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.学习目标 了解集合的概念 了解并使用抽象数据类型 初步了解使用Java泛型 学习栈这种 ...
- 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结
20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...
- 20172304 《程序设计与数据结构》第九周学习总结
20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...
- 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结
学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...
- 20155227 2016-2017-2 《Java程序设计》第九周学习总结
20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...
- 20175208 《Java程序设计》第九周学习总结
20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...
- 20175202 《Java程序设计》第九周学习总结
20175202 2018-2019-2 <Java程序设计>第九周学习总结 教材知识点总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称 ...
最新文章
- ButterKnife--View注入框架
- 即将上线的flume服务器面临的一系列填坑笔记
- 第4章 类型基础 -- 4.1 所有类型都从System.Object派生
- spring boot使用外置tomcat部署需增加如下初始化类
- OpenCV伪彩色applyColorMap函数
- 华为交换机S5700开启telnet
- php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...
- java 连接 sftp失败_java – 文件上传到SFTP失败(Apache VFS)
- 在webLogic 10.3中部署Hibernate 3.5出现 ClassNotFoundException解决办法
- Spring boot如何打war包发布到tomcat
- MYSQL 浅谈MyISAM 存储引擎
- HP刀箱无法识别刀片的处理方法
- mysql char最大长度_MySQL中的CHAR和VARCHAR到底支持多长?
- c++ 结构体和类的区别
- springboot分页展示功能_SpringBoot实战项目(三)用户列表以及分页功能实现
- 计算机网络技术 网络参数配置与常用网络命令使用和网络仿真工具的使用
- 三度冲刺IPO,负债率超70%的喜相逢能否成功敲钟?
- 寻仙手游服务器维护,寻仙手游4月4日更新维护内容及新玩法详解介绍
- MySQL 索引学习笔记
- [蓝桥杯2019初赛]外卖店优先级