首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    哈夫曼树(最优二叉树)的概念以及构造

    在实际生活和生产应用中,我们往往会遇到综合比较一系列的离散量的问题;比如说车站根据包裹的重量以及旅途的长短来确定携带行李的价格,或者我们根据一定的重量范围来给一箱铁球进行分类。这一类问题的解决思路是: 1、 根据实际需要划分出分类的标准; 2、 按一定的顺序(算法)将实际的数据归到相应的类别里。 一般情况下,我们所确定的分类标准并不能保证每一类的数据量是平均分配的;也就是说,由于每一类数据出现的概率不同,造成当采用不同的算法时所需的运算次数的不同。当然,在实际生产生活中,我们更希望得到一种最快,最简洁同时也不会产生歧义的算法。在这个背景下,哈夫曼树以及哈夫曼算法应运而生。

    01

    二叉树算法应用案例

    大家好,又见面了,我是你们的朋友全栈君。笔者在1月4号将在CSDN学院开设一门公开课《 算法与游戏实战》,在这里先把课程内容透露一部分给读者。首先讲述二叉树算法,二叉树在IT领域应用是非常广泛的,它不仅在游戏开发中,在当前比较火的人工智能上也得到了广泛的应用。作为使用者,首先要清楚二叉树的特性:它是n(n≥0)个结点的有限集;它的孩子节点做多是2个;它的遍历有先序,中序,后序;它的存储结构分为线性和链式存储等等;还有一种是最优二叉树也称为哈夫曼树,下面开始案例的分享。 在游戏开发中美术会制作很多图片,这些图片一方面是用于UI界面,另一方面是用于模型的材质。大部分网络游戏使用的图片数量是非常多的,图片要展示出来,它首先要加载到内存中,内存大小是有限制的,它除了加载图片还需要加载数据或者是模型。当跟随玩家的摄像机在场景中移动时,场景会根据摄像机的移动一一展现出来,这就需要不断的把不同的场景加入到内存中,这无疑会增加内存的吞吐负担,如果我们把图片归类把它们做成一张大的图片,这样一旦加入到内存中,就不用频繁的加载了,提高了效率。 现在大家都使用Unity开发或者使用虚幻开发,它自己实现了一个打成图集的功能,或者使用TexturePack工具也可以将其打包成图集。虽然我们看不到它们的代码实现,但是我们自己可以使用二叉树将其打包成图集,给读者展示利用二叉树实现的UI打成图集的效果图:

    02

    哈夫曼树的详细讲解(手把手教学)

    哈夫曼树又称为最优树,是一类带权路径长度最短的树,应用光泛。 在学习哈夫曼树的时候,我们来先引入路径和路径长度的概念。 ***1.1路径:***从树中的一个结点到另一个结点的之间的分支构成的。 ***1.2路径长度:***路径上的分支数目。 ***1.3树的路径长度:***从树根到每一个结点的路径长度之和 结点的带权路径长度:从该结点到树根之间的路径长度与结点上的权值的乘积 ***1.4树的带权路径长度:***树中所有叶子结点的·带权路径长度之和,也就是WPL,WPL=每一个结点的对应的权值乘以对应的路径长度之和。 注意: 1.满二叉树不一定是哈夫曼树 2.哈夫曼树中权值越大的叶子结点离根越近 3.具有相同带权结点的哈夫曼树不惟一 4.在结点相同的二叉树中,完全二叉树是路径长度最短的二叉树。

    03
    领券