2

首先,我是编程新手,所以我希望得到简单且解释清楚的答案。其次,这是一个非常具体的问题,我不希望版主和其他用户将这个问题作为离题或过于宽泛而结束。

无论如何,我想使用某种数据结构在 java 中实现 Huffman 编码。但是,但是,我正在考虑使用 splay 树,因为它不会在我的课程大纲中涵盖,而且我想学习一种新的数据结构。现在的主要问题是霍夫曼编码算法是否首先需要展开树数据结构?

在基于 Huffman 的数据压缩项目中,我可以使用 splay 树做什么?或者您更愿意为这个项目建议一个更好的(因为它的效率和创造性,因为它是独一无二的,而且很少有人听说过)数据结构?

谢谢

4

1 回答 1

1

任何霍夫曼码都可以用二叉树的结构来表示,二叉树的叶子是要编码的符号。当沿着从根到要编码的符号的路径时,左右分支可以表示为01位;结果是正确的前缀代码,代码长度由符号的深度指定。

理想情况下,您将直接使用展开树的结构来确定每个符号的 Huffman 代码。但是,展开树将其数据保存在节点中,而不是叶子中。您将需要找到某种方法来使用基于叶子中的数据的展开树,或者提出一种转换来从节点位置计算一组有效(和高效)的前缀代码。

一种可能性是在其根节点中维护每个子树的最左边和最右边的叶子(当然,随着树的展开而更新)。这应该允许您搜索叶子,即使您实际上并不关心您的节点数据。然后,传统的展开操作应该自然地生成一个动态的 Huffman 代码,该代码偏向于最近出现的符号。

于 2016-03-09T23:52:13.333 回答