霍夫曼编码是一种基于频率对字符进行编码的方法。每个字母都被分配了一个可变长度的二进制字符串,例如0101或111110,其中较短的长度对应于更常见的字母。为了实现这一点,构建了一棵二进制树,使得从根到任何叶子的路径唯一地映射到一个字符。当遍历路径时,下降到左子项对应于前缀中的0,而下降到右子项对应于1。
下面是一个示例树(请注意,只有叶节点有字母):
*
/ \
* *
/ \ / \
* a t *
/ \
c s
使用这种编码,猫将被表示为0000110111。
给定一个字符频率字典,构建一个霍夫曼树,并使用它来确定字符及其编码的二进制字符串之间的映射。
输入是唯一字符及其出现频率的数组,输出是霍夫曼树。
>
为每个唯一字符创建一个叶节点,并构建所有叶节点的最小堆(最小堆用作优先级队列。频率字段的值用于比较最小堆中的两个节点。最初,频率最低的字符位于根)
从最小堆中提取两个频率最小的节点。
创建一个新的内部节点,其频率等于两个节点频率之和。将第一个提取的节点作为其左子节点,将另一个提取的节点作为其右子节点。将此节点添加到最小堆。
重复步骤#2和#3,直到堆只包含一个节点。剩下的节点是根节点,树是完整的。
请看这个教程,这里描述了一步一步的构建树过程。
参考:2018大厂高级前端面试题汇总 自我学习练习,可能存在错误,不构成参考。
~$npm安装-g yo npm错误!达尔文14.3。0 NPM ERR!"节点"/usr/本地/bin/npm""安装"-g""yo" npm错误!节点v0。12.5 npm错误!npm v2。14 npm错误!路径/usr/local/lib/node_模块/yo npm错误!代码EACCES NPM ERR!errno-13 npm错误!错误:EACCES,rmdir'/usr/local/
这是一个骇人听闻的问题:爱丽丝是一个幼儿园老师。她想给班上的孩子们一些糖果。所有的孩子坐成一行(他们的位置是固定的),每个人根据他(她)在班上的表现有一个评级分数。爱丽丝想给每个孩子至少一颗糖。如果两个孩子挨着坐,那么评分较高的那一个必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少给孩子们的糖果总数。 测试数组:n=10,n个元素为[2 4 2 6 1 7 8 9 2 1]。我得到的答案是18
启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:
我正试图在Android Studio上调试我的项目——一个非常简单的东西——hello world。我得到这个信息: "安装未成功。应用程序无法安装:INSTALL_FAILED_MISSING_SHARED_LIBRARY apk列表:[0]'C:\Users\Pierr\AndroidStudioProjects\Hello\app\build\outputs\apk\debug\app d
正在启动Gradle守护进程...Gradle守护进程5 s 654 ms启动 失败:生成失败,出现异常。 > 其中:构建文件'c:\users\asus\androidstudioprojects\culturelwordsgame\app\Build.gradle'行:1 错误:评估项目':app'时出现问题。 未能应用插件[id'com.android.internal.version-ch