Android Java 数据结构
Android基础技术核心归纳(一) Java基础技术核心归纳(一) 数据结构基础知识核心归纳(一)
Android基础技术核心归纳(二) Java基础技术核心归纳(二) 数据结构基础知识核心归纳(二)
Android基础技术核心归纳(三) Java基础技术核心归纳(三) 数据结构基础知识核心归纳(三)
Android基础技术核心归纳(四) Java基础技术核心归纳(四)
不知不觉又是一年的9月,今天跟一个师弟聊天,谈到了他现在面试的一些情况,突然想起自己当年也是这么走过来的,顿时感慨良多。Android/Java经验汇总系列文章,是当初自己毕业时笔试、面试和项目开发中相关的总结,虽然不是很高深的东西,也没有归纳得很全面,但是对Android、算法、Java把握个大概还是没问题,今天特意将这些文章放出来,希望能够对看到这个系列文章的毕业生朋友一点帮助吧。当然,由于受当时知识面的限制,归纳得可能不是很准确,若有疑问就留言吧,我就不细看了。
1.赫夫曼树与赫夫曼编码
1.赫夫曼树
(1)定义:假设有n个权值{w1,w2,...,wn},构造一棵有n个叶子结点的二叉树,每个叶子结点带权为wk,每个叶子的路径长度为lk,则其中树的带权路径长度WPL=∑(wk*lk)最小的二叉树称为赫夫曼树,也称最优二叉树。
,该树的带权路径长度WPL = ∑(wk*lk) = 1*10+2*70+3*15+3*5=210.
● 叶子的路径长度lk:从根结点到叶子结点之间的分支数目总和;
● 树的带权路径长度WPL:树中所有叶子结点的带权
2.构造赫夫曼树算法
(1)根据给定的n个权值{w1,w2,....,wn}构成n棵二叉树的集合F={T1,T2,...,Tn},其中每棵二叉树Tk中只有一个带权为wk根结点,其左右子树均为空;
(2)在F中选择两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左右子树上根结点的权值之和;
(3)在F中删除这两棵树,