计算机存储的数据包括文字和音频
文字
文字是通过像素点展示的,像素点由颜色、位置、亮度三个元素组成。其中,颜色由红绿蓝三原色组成,位置指x轴和y轴相对的位置,亮度由颜色决定。
颜色 ----> 3byte
位置 ----> x:1short=2byte
y:1short=2byte
综上,存储一个像素点需要56bit。
表示一个字符大约需要200个像素点,200*56bit = 11200bit。
定长编码
为了降低数据存储所需要的内存,我们使用编码(如ASCII码(8bit256个数值)、Unicode码)存储字符,我们将这种形式的编码称为定长编码。
a ----ASCII码----> 8bit
变长编码
为了降低资源消耗,我们使用变长编码存储字符。变长编码根据字符出现的次数自定义编码表。字符出现次数越多,所对应的编码就越小。
由于变长编码容易产生歧义,我们使用哈夫曼编码存储字符。
哈夫曼树的构建过程
1、将待构建哈夫曼树的节点从小到大进行排序,将每个数据都看作一个节点,每个节点都构建出一棵简单的二叉树。
2、取出根节点权值最小的两棵二叉树。
3、组成一棵新的二叉树,该二叉树的根节点的权值是前两棵二叉树根节点权值的和。
4、将这个二叉树以根节点的权值大小再次进行排序,不断重复1-2-3-4过程,直到所有的数据都被处理,就得到了一棵哈夫曼树。
哈夫曼编码
首先统一权值,把字符的出现次数当作权值。
要求:两数相加的权值最小。
构建方法一
如果我们规定向左走为1,向右走为0,则有
由该哈夫曼树构建的哈夫曼编码不会产生歧义
构建方法二
如果我们规定向左走为1,向右走为0,则有