没有合适的资源?快使用搜索试试~ 我知道了~
大家都知道哈夫曼是用来做压缩解压的算法,通过哈夫曼压缩后的数据其实就相当于加密了,我们可以把返回值用哈夫曼算法压缩得到一串的0101,然后再随便头尾补个乱码什么的值,到客户端再把乱码去除,在一定程度上就能让截获者迷惑了,而且传输的数据量也小了一些,节省流量。 题目:将一个字符串进行哈夫曼编码;编码过程中,会得到每个字符的编码,通过已知的每个字符的编码对之前的编码进行解码。 我的代码是基于这段算法描述实现的。实际上,我看的是中文版,但是没有找到该书的中文电子版,只好把英文版粘过来了。不过,好在英文版的也不复杂。 接下来是解码。虽然解码过程很简单,但是却是本文存在的理由。我在网上看了一些文章,都忽略一个问题:编码和解码过程中都有的东西是什么?也就是,依靠什么东西来解码?本文的答案是“每个字符的编码”,它在编码的过程中生成,和字符串编码一起传到解码端用于解码。你也可以说是“每个字符出现的次数”或者“哈夫曼树”,不管是“每个字符出现的次数”还是“哈夫曼树”,你都需要通过他们得到“每个字符的编码”之后才能进行解码。
资源推荐
资源详情
资源评论
Java 实现哈夫曼编码和解码
最近无意中想到关于 api 返回值加密的问题,譬如我们的 api 需要返回一些比较敏感或
者重要不想让截获者得到的信息,像如果是做原创图文的,文章明文返回的话则有可能被
抓包者窃取。
关于请求时加密的方式比较多,像常见的如阿里某 api 就是根据所有参数 ascii 码升序
排序并加盐加密,这样能避免黑客篡改请求值。那关于返回值加密的,我觉得用哈夫曼编
码就不错。
大家都知道哈夫曼是用来做压缩解压的算法,通过哈夫曼压缩后的数据其实就相当于
加密了,我们可以把返回值用哈夫曼算法压缩得到一串的 0101,然后再随便头尾补个乱码
什么的值,到客户端再把乱码去除,在一定程度上就能让截获者迷惑了,而且传输的数据
量也小了一些,节省流量。
这里有一篇是讲 java 实现哈夫曼的。
题目:将一个字符串进行哈夫曼编码;编码过程中,会得到每个字符的编码,通过已知的
每个字符的编码对之前的编码进行解码。
分析:首先是哈夫曼编码算法,引用李泽年写的《多媒体技术教程》中对哈夫曼编码算法
的描述:
• Initialization: Put all symbols on a list sorted according to their frequency counts.
• Repeat until the list has only one symbol left:
• From the list pick two symbols with the lowest frequency counts. Form a Huffman subtree that
has these two symbols as child nodes and create a parent node.
• Assign the sum of the children's frequency counts to the parent and insert it into the list such
that the order is maintained.
–Delete the children from the list.
• Assign a code word for each leaf based on the path from the root.
我的代码是基于这段算法描述实现的。实际上,我看的是中文版,但是没有找到该书的
中文电子版,只好把英文版粘过来了。不过,好在英文版的也不复杂。
接下来是解码。虽然解码过程很简单,但是却是本文存在的理由。我在网上看了一些文
章,都忽略一个问题:编码和解码过程中都有的东西是什么?也就是,依靠什么东西来解码?
本文的答案是“每个字符的编码”,它在编码的过程中生成,和字符串编码一起传到解码端用
于解码。你也可以说是“每个字符出现的次数”或者“哈夫曼树”,不管是“每个字符出现的次
数”还是“哈夫曼树”,你都需要通过他们得到“每个字符的编码”之后才能进行解码。
下面是 Java 代码:
package com.liyuncong.algorithms.algorithms_huffman;
/**
* 哈夫曼树的节点
* @author yuncong
*
*/
资源评论
洛神灬殇
- 粉丝: 1w+
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功