4
$\开始组$

假设我们在字符集$C=\{0,1,\dots,n−1\}$上有一个最优的无前缀代码,并且我们希望使用尽可能少的比特来传输该代码。如何仅使用$2n−1+n\lceil\log n\rceil$位在$C$上表示任何最佳的预编译免费代码。

我的方法:

  1. 从$n$树开始,每个树由一个节点组成,对应一个消息字,权重为$p(i)$

  2. 重复操作,直到只有一棵树。选择两个权重最小的子树,通过添加一个新节点作为根来组合它们,并使这两个树成为其子树。新树的权重是两个子树的权重之和。对于堆,组合树的每一步需要$O(\log n)$时间,总时间为$O(n\log n)$。

有确凿的证据吗?

$\端组$
1
  • 2
    $\开始组$ 我不明白。在第一段中,你提出了一个问题传输代码。在第二段中,你似乎只谈到建造代码;我没有看到任何关于传输的参考。最后,您陈述了时间复杂性,但最初您需要一定的空间复杂性。这两段之间有什么联系?顺便说一句,你可能想看看哈夫曼代码是如何存储在JPEG文件中的:只存储长度和符号,而不是代码本身,这些代码是根据长度重建的。 $\端组$
    – 乔里基
    2012年2月29日18:52

1答案1

重置为默认值
7
$\开始组$

提示:$C$上的最佳无前缀代码具有关联的完全二叉树具有$n$个叶子和$n-1$个内部顶点;这样的树可以由$2n-1$位的序列明确编码,该序列很容易从预序遍历在树上。只需将$C$的$n$成员与树的$n$leaves关联起来,这可以通过按预排序遍历遇到它们的顺序列出它们来完成$\lceil\log n\rceil$有足够的位来表示$C$的每个$n$成员,如果每个成员都分配了$\lceil/log n\rcuil$位,则不需要分隔符。总共是2n-1+n\lceil\log n\rceil$bits;你只需要填写细节。

$\端组$
1
  • 1
    $\开始组$ 感谢您的回复! $\端组$ 2012年3月4日13:12

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.