当前位置: 首页 > wzjs >正文

做面料哪个网站好百度平台客服联系方式

做面料哪个网站好,百度平台客服联系方式,长春网站制作一般需要多少钱,高端网站目录标题 哈夫曼树哈夫曼树的定义哈夫曼树的构造哈夫曼编码哈夫曼树的实现 哈夫曼树 哈夫曼树的定义 路径:从一个结点到另一个结点的路线树的路径长度:从树根到树中每个结点的路径长度之和结点的权:在一些应用中,赋予树中结点的…

目录标题

  • 哈夫曼树
    • 哈夫曼树的定义
    • 哈夫曼树的构造
    • 哈夫曼编码
    • 哈夫曼树的实现

哈夫曼树

哈夫曼树的定义

  • 路径:从一个结点到另一个结点的路线
  • 树的路径长度:从树根到树中每个结点的路径长度之和
  • 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数
  • 结点的带权路径长度:结点到树根之间的路径长度与该结点权值的乘积
  • 树的带权路径长度WPL:树中所有叶子结点的带权路径长度之和 WPL = ∑ i = 1 n w i l i \text{WPL} = \sum_{i=1}^{n} w_i l_i WPL=i=1nwili
  • 其中,w是叶子结点的权值,n是叶子结点的个数,l是叶子结点到根的路径长度.
  • 带权路径长度最小的二叉树称为最优二叉树.

哈夫曼树的构造

  • 有n棵权值分别为w₁, w₂, …, wₙ的二叉树所组成的集合,这些二叉树的左右子树都为空
  • 从集合中选取出权值最小的两棵二叉树构成一棵新的二叉树。为了保证新树仍是二叉树,需要增加一个新结点作为新二叉树的根,将所选的两棵子树作为其根结点的左右子树,并将其两个子树的权值之和作为其根的权值。从集合中删除已经选中的二叉树,将新生成的树加入集合中参与下一轮选择
  • 重复上一步操作,直至集合中剩下最后一棵二叉树,这棵二叉树便是哈夫曼树
  • 哈夫曼树的构造过程
    在这里插入图片描述
  • 上述哈夫曼树的WPL值情况: W P L = 5 × 2 + 1 × 3 + 4 × 3 + 7 × 2 + 9 × 2 = 57 WPL= 5×2+1×3+4×3+7×2+9×2=57 WPL=5×2+1×3+4×3+7×2+9×2=57

哈夫曼编码

  • 一般地,设需要编码的字符集为{a₁, a₂, a₃, …, aₙ},各个字符出现的频率为{w₁, w₂, …, wₙ}。规定左分支为0,右分支为1,则从根结点到叶子结点经过的分支所组成的0和1字符串便是对应字符的编码,这就是哈夫曼编码。
  • 示意图
    在这里插入图片描述

哈夫曼树的实现

class Node(object):def __init__(self, weight):# 结点的权值self.weight = weightself.left = Noneself.right = None# 是否新构造根结点,新构造的结点不进行WPL计算self.isNew = Falsedef __gt__(self, other):"""用于对结点之间的排序"""return self.weight > other.weightclass huffmanTree(object):def __init__(self, nodeList):self.WPL = 0self.root = self.createHuffmanTree(nodeList)def createHuffmanTree(self, nodeList):"""创建哈夫曼树:param nodeList: 森林中的单个结点构成的二叉树:return:"""# 如果当前森林中二叉树棵树大于1while len(nodeList) > 1:# 森林中的二叉树进行排序nodeList.sort()# 获取根结点最小的二叉树left = nodeList.__getitem__(0)# 获取根结点次小的二叉树right = nodeList.__getitem__(1)# 构造新结点newNode = Node(left.weight + right.weight)newNode.isNew = True# 将新结点的左孩子结点指针指向left结点newNode.left = left# 将新结点的右孩子结点指针指向right结点newNode.right = right# 从森林中删除已选择的二叉树nodeList.pop(0)nodeList.pop(0)# 将新构造的二叉树加入森林中nodeList.append(newNode)return nodeList.__getitem__(0)def calculate_WPL(self, node, level):"""计算哈夫曼树的wpl:param node: 根结点:param level: 层数:return:"""if node != None:if not node.isNew:self.WPL += node.weight * levelself.calculate_WPL(node.left, level+1)self.calculate_WPL(node.right, level+1)if __name__ == "__main__":print('PyCharm')nodeList = []nodeList.append(Node(1))nodeList.append(Node(7))nodeList.append(Node(4))nodeList.append(Node(5))nodeList.append(Node(9))hufftree = huffmanTree(nodeList)hufftree.calculate_WPL(hufftree.root, 0)print("哈夫曼树的WPL:", hufftree.WPL)
  • 运行结果

在这里插入图片描述

http://www.dtcms.com/wzjs/35761.html

相关文章:

  • 网页设计与网站建设区别宁波网络营销有哪些
  • 西安关键词优化软件北京优化seo
  • 用python做美食网站全网推广的方式有哪些
  • 全国建设管理信息网站哈尔滨seo关键词
  • 做网站哪家靠谱百度推广天天打骚扰电话
  • 网站建设前新网站推广方法
  • 网站模板做的比较好的百度地图的精准定位功能
  • 2021年免费的网站有哪些上海关键词排名优化公司
  • 赤峰北京网站建设搜索引擎营销sem
  • 怎么做一个手机网站如何在百度发布广告
  • 唐山住房和城乡建设网站足球世界排名一览表
  • 做房产网站需要多少钱深圳网站设计实力乐云seo
  • 沈阳网站设计搜索引擎的优化方法有哪些
  • vue做的网站域名汇总北京高端网站建设
  • 同ip多域名做网站seo方法培训
  • 网站服务器规划 用户数长沙网站制作策划
  • 做circrna的网站百度seo排名公司
  • 网站建设大概好多钱甘肃搜索引擎网络优化
  • 济阳网站建设哪家好百度帐号管家
  • 大连做网站比较好的公司长沙关键词优化费用
  • 购物网站 建设网站流量统计分析报告
  • 什么网站可以直接做word文档近期时事新闻
  • 手机网站建设的重点步骤近期发生的重大新闻
  • asp.net做电商网站页面设计镇江seo快速排名
  • 北京大湖建设工程有限公司网站平台seo
  • 有那些专门做外贸的网站呀合肥百度网站排名优化
  • 网站防注入网站策划方案
  • 五金日杂店做网站常见的网络推广方式有哪些
  • 湖南专业做网站公司有哪些爱链在线
  • 做一个app开发多少钱windows优化大师可以卸载吗