热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

如何重新设计霍夫曼树节点的权重,使得权值尽可能小(整数),而且根据新权值生成的霍夫曼树和原树完全一致?

如何重新设计霍夫曼树节点的权重,使得权值尽可能小(整数),而且根据新权值生成的霍夫曼树和原树完全一致?如果可能的话,n个原始数据生成的2n-1个节点的树会不会有个权值上限A?即重新生成的权
如何重新设计霍夫曼树节点的权重,使得权值尽可能小(整数),而且根据新权值生成的霍夫曼树和原树完全一致?


如果可能的话,n个原始数据生成的2n-1个节点的树会不会有个权值上限A?即重新生成的权值不可能会大于这个数A?

16 个解决方案

#1


pu

#2


我看了半天也不太明白你的意思,可否将你的问题说得再详细一点,
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
★  支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名  ●  
     可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]

#3


霍夫曼树生成原理是权值越大的越在上面,每一层的节点的权值都比下一层的大

现在假设有如下原始数据:
6 8 14 25 23 9进行霍夫曼编码

           85
         /     \
           37      48
         /  \   / \
                 23  14 23 25
      /   \
  14   9
 / \
6   8
但我们知道根据以上权值构建的霍夫曼树不是唯一的
我的问题是:

能否根据已知的霍夫曼树生成每个节点的权值再根据此权值重新构建树
和原来的树完全一样?

还有就是能否让新生成的权值尽可能小

#4


没想到progame会问这样的问题:)

我先说两句吧。
首先,霍夫曼树就是一个权重最小的生成树,尽可能小又从何谈起呢?
其次,霍夫曼树不可能唯一,因为:
1、对换已生成的一个树的任一左、右子树,都会生成不同的霍夫曼树。
2、在已生成的一个霍夫曼树中,对换任两个权重相同的子树也会生成不同的霍夫曼树。

#5


我想你误会我的意思了
霍夫曼树当然生成的总权重是最小的

我的问题是,拿上面的例子说吧:
我可以把生成树后的节点权值替换成:
6 8 14 25 23 9
1 2  3  10 9 4

这样根据此数据重新构建树,树结构和原来是一样的

我要的就是重新生成一个可以重构树的权值集

#6


什么叫“能否让新生成的权值尽可能小”?是说所有整数之和最小么?

#7


不是所有整数之和

我要的是节点的最大权值最小

#8


           85
         /     \
           37      48
         /  \   / \
                 23  14 23 25
      /   \
  14   9
 / \
6   8

           85
         /     \
           37      48
         /  \   / \
                 14  23 23 25
                     /   \  
        9    14
            / \
           6   8

                     18
         /     \
           8      10
         /  \   / \
                 4  4  5 5
                     /  \  
        2    2
            / \
           1   1

偶不知道怎么说,就画了上面的图,第一张图令左子树的权小等于右子树的权,成为第二张数,然后从叶子节点往上推,如第三张图,可以作出最小值18,程序你自己编一下,哎,不知道怎么表达,大概偶的思路就是这样。


#9


/ \
 1   1

这样是不行的,因为这两个节点可以互换,生成的树不唯一

#10


/\ /\
4 4 5 5

这样加一编码也不行,万一这层有N个节点
这样的话如果编码为:
x x+1 x+2 ... x+n-1

x+(x+1)还应该大于x+n-1才行

#11


你的意思是这个权值不能相同,那就是说新的权值的整数各不相同,这样行么:
                     25
         /     \
           12      13
         /  \   / \
                 5  7  6 7
                     /  \  
        4    3
            / \
           1   2

#12


                     27
         /     \
           14      13
         /  \   / \
                 5  9  6 7
                     /  \  
        4    5
            / \
           2   3

#13


又错了:
                     29
         /     \
           14      15
         /  \   / \
                 5  9  7 8
                     /  \  
        4    5
            / \
           2   3

#14


你不要把树的左右节点对换

要和原来完成一致的

这样重新编码才能也一致

我的想法是如果有个最顶端的M值
而下一层有N个节点,则:
N*X + N*(N-1)/2 = M
求出X,向下取整,即为此层第一个节点的权值

依此类推,直到最底下一层

可是M值无法获知:(

如果从自底而上的方法处理:
我即使能够保证这一层的节点的父节点都比这一层权值大
如:
 X   X
/ \ / \
X X X X
我可以X+(X+1)>X+3得到X值为3,即下面一层权值为:3 4 5 6
上一层为 7 11
可是我无法保证上一层节点数会不会大于6个,如下面这样
 X   X  X  X  X  X   X   X
/ \                     / \
X X                     X X

7~11之间的数是不够分配的

#15


有道理,我得好好想想...

#16


pu

推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有