栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

日撸代码300行学习笔记 Day 28

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日撸代码300行学习笔记 Day 28

目录

1.Huffman 编码 (节点定义与文件读取)

2.代码

2.1 newBufferedReader

2.2 try catch

2.3 Collectors

3.总结

1.Huffman 编码 (节点定义与文件读取)

对于哈夫曼树,说简单一点,其就是带权路径长度最短的树。

定义:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

2.代码

在这一段代码中,出现了几个新东西,一是newBufferedReader,try catch,Collectors等

2.1 newBufferedReader

 BufferedReader类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行,可以通过构造函数指定缓冲区大小也可以使用默认大小。对于大多数用途,默认值足够大由Reader构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成,建议通过BufferedReader包装Reader的实例类以提高效率。引用自:JAVA基础知识之BufferedReader流

2.2 try catch

如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容

如果try中的代码一但出错,程序立即跳入catch中去执行代码,那么try中出错代码后的所有代码就不再执行了.

2.3 Collectors

java.util.stream.Collectors实现各种有用的缩减操作的Collector的实现,例如将元素累积到集合中,根据各种标准汇总元素等。Collectors可以帮我们完成的事情,例如:分组、排序(支持多字段排序)、最大值、最小值、平均值,简单的来说,以前我们在数据上面用sql去完成的聚合相关的操作,Collectors都可以完成。、

package tree;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Huffman {
	
	class HuffmanNode {
		
		char character;

		
		int weight;

		
		HuffmanNode leftChild;

		
		HuffmanNode rightChild;

		
		HuffmanNode parent;

		
		public HuffmanNode(char paraCharacter, int paraWeight, HuffmanNode paraLeftChild, HuffmanNode paraRightChild,
				HuffmanNode paraParent) {
			character = paraCharacter;
			weight = paraWeight;
			leftChild = paraLeftChild;
			rightChild = paraRightChild;
			parent = paraParent;
		}// Of HuffmanNode

		
		public String toString() {
			String resultString = "(" + character + ", " + weight + ")";

			return resultString;
		}// Of toString

	}// Of class HuffmanNode

	
	public static final int NUM_CHARS = 256;

	
	String inputText;

	
	int alphabetLength;

	
	char[] alphabet;

	
	int[] charCounts;

	
	int[] charMapping;

	
	String[] huffmanCodes;

	
	HuffmanNode[] nodes;

	
	public Huffman(String paraFilename) {
		charMapping = new int[NUM_CHARS];

		readText(paraFilename);
	}// Of the first constructor

	
	public void readText(String paraFilename) {
		try {
			inputText = Files.newBufferedReader(Paths.get(paraFilename), StandardCharsets.UTF_8).lines()
					.collect(Collectors.joining("n"));
		} catch (Exception ee) {
			System.out.println(ee);
			System.exit(0);
		} // Of try

		System.out.println("The text is:rn" + inputText);
	}// Of readText

}
3.总结

在最近几天的学习中,自己重心主要转变成了C语言以及数据结构,操作系统,计网的学习中,由于以前从来没学过计网,目前也是从头第一次开始学,所花时间就有点长。再加上经过这几天PTA的做题,自己C语言感觉问题也还有好多需要去处理以及实践,例如很基础的链表逆转,自己想出来了算法,核心也就几排,但是pta上提交,就会出现部分正确,部分运行超时的问题。所以JAVA的代码进度应该会会造成一定的延后。这种情况最多只会持续到复试左右,然后就可火力全开,进行全速推进了。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号