近似保序霍夫曼码

2024-03-01

我正在做算法和数据结构课程的作业。我无法理解给出的说明。我会尽力解释这个问题。

我给出的输入是一个正整数n其次是n正整数,表示有序字符集中符号的频率(或权重)。第一个目标是构造一棵树,为有序字符集中的每个字符提供近似的保序霍夫曼代码。我们要通过“贪婪地将两者合并”来实现这一目标adjacent权重之和最小的树。”

在作业中,我们看到传统的霍夫曼代码树是通过首先将权重插入优先级队列来构建的。然后,通过使用 delmin() 函数从优先级队列中“弹出”根节点,我可以获得频率最低的两个节点,并将它们合并为一个节点,其左右为这两个频率最低的节点,其优先级为其子级优先级的总和。然后,该合并节点被插入回最小堆中。重复该过程直到所有输入节点都被合并。我已经使用大小为 2*n*-1 的数组实现了这一点,输入节点从 0...n-1 然后从n...2*n*-1 是合并的节点。

我不明白如何贪婪地合并权重之和最小的两棵相邻树。我的输入基本上被组织成一个最小堆,从那里我必须找到总和最小的两个相邻节点并将它们合并。我认为我的教授所说的相邻是指它们在输入中彼此相邻。

输入示例:

9
1
2
3
3
2
1
1
2
3

那么我的最小堆看起来像这样:

               1
          /         \
        2            1 
     /     \        /  \
    2       2      3    1
   /  \
  3    3 

那么,总和最小的两个相邻树(或节点)就是出现在输入末尾附近的两个连续的 1。我可以应用什么逻辑来从这些节点开始?我似乎错过了一些东西,但我无法完全理解它。如果您需要更多信息,请告诉我。如果有不清楚的地方,我可以详细说明或提供整个作业页面。


我认为这可以通过对传统算法进行小的修改来完成。不要在优先级队列堆中存储单个树,而是存储成对的相邻树。然后,在每一步中删除最小对(t1, t2)以及最多两对也包含这些树,即(u, t1) and (t2, r)。然后合并t1 and t2到一棵新树t',重新插入对(u, t') and (t', r)在具有更新权重的堆中并重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

近似保序霍夫曼码 的相关文章

  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul

随机推荐

  • 从 React Native 中的 api 拦截器(组件外部)重定向到屏幕

    我正在开发一个 React Native 应用程序 该应用程序使用 JWT 令牌对请求进行身份验证 为此 我创建了 axios 请求和响应拦截器 将令牌添加到每个请求 请求拦截器 并在响应具有 401 HTTP 状态 响应拦截器 时将用户重
  • chrome webdriver 将视口设置为低于 500px?

    在我基于 selenium 的测试中 我将窗口大小设置为 400 w 719 h 以创建 400x640 的内部视口大小 我的大多数测试都是基于该尺寸 尽管有些测试使用其他尺寸 Dimension size new Dimension 40
  • C++线程栈地址范围

    C 标准是否提供了关于线程堆栈的非重叠性质的保证 如由一个线程启动 std thread 特别是 是否可以保证线程在线程堆栈的进程地址空间中拥有自己的 独占的 分配的范围 标准中哪里描述了这一点 例如 std uintptr t foo a
  • 在运行时检测 C++ 堆碎片的可移植方法?

    我正在编写一个基于 qt 的 C 应用程序 我需要能够检测内存碎片 以便检查当前系统是否能够真正承受内存负载 程序加载一个大图像 15 21 兆像素是标准 在内存中 然后对其执行一些过滤 使用稀疏矩阵 例如 我在 Windows 中遇到内存
  • 在 Google App Engine 中使用 mapreduce 的简单反例

    我对 GAE 中 MapReduce 支持的当前状态有些困惑 根据文档http code google com p appengine mapreduce http code google com p appengine mapreduce
  • Python 将 Windows 文件路径转换为变量

    给定的是一个包含 Windows 文件路径的变量 然后我必须去阅读这个文件 这里的问题是路径包含转义字符 我似乎无法摆脱它 我检查了 os path 和 pathlib 但都期望正确的文本格式 但我似乎无法构建 例如这个 请注意 给出了 f
  • 如何使用配置和编程方式优雅地关闭 Spring Boot 应用程序?

    我想优雅地关闭我的 Spring Boot 应用程序 我想知道通过 application yaml 文件配置它和以编程方式配置它有什么区别 在我的应用程序 yaml 文件中 我已从参考中添加了此内容https www baeldung c
  • 用 NA 填充两个矩阵的缺失数据

    我有两个方阵 其中都有一些缺失的数据 我想在两个矩阵中用 NA 填充缺失的数据 数据如下 first matrix t1 matrix c 1 0 1 0 0 1 1 0 1 nrow 3 ncol 3 byrow TRUE rowname
  • 使用自定义键/值在 Mongoose/Handlebars 中创建 Schema 对象

    我想创建一个表单来输入 mongo mongoose 模式中对象的自定义键和值 最终在车把视图中看到 请参阅示例以更好地解释 任何帮助都会很棒 Mongoose Mongodb 架构 var docketSchema new Schema
  • 包含一个字符串且不包含另一字符串的行的正则表达式

    我有以下正则表达式可以方便地匹配包含以下内容的所有行console log or alert 在支持 PCRE 的编辑器中打开的任何 javascript 文件中都可以使用该函数 b console log alert b 但我遇到很多文件
  • XPath 错误。节点不能在创建它的文档以外的文档中使用

    我正在尝试使用 XPath 解析 xml 文档 该脚本在 chrome 上运行良好 但出现以下错误 WrongDocumentError 节点不能在除 它是在其中创建的 有问题的代码如下 function StringToXML oStri
  • 尝试了解 asm 中断,特别是 16h func 01H

    这是家庭作业 我不期望你解决我的问题 只需要一些理解 我必须在 dosbox 中使用 ASM 和 C 我的第一个问题是我不太明白如何使用 BIOS 中断 任何带有代码示例的好的教程都会非常感激 好吧 我知道有中断 每个中断都有自己的功能和参
  • 无法消除瞬态属性 getter 实现中的 PrimitiveValue 访问器的编译器警告

    我在我的应用程序中的一个模型上实现了如下所示的瞬态属性 它在模型设计中被声明为具有未定义类型的瞬态属性 property nonatomic readonly NSNumberFormatter currencyFmt 该访问器的当前 无警
  • 使用 GeoPandas 计算其他多边形内的多边形面积

    我有两个GeoSeries df1 gpd GeoSeries Polygon 0 0 2 0 2 2 0 2 Polygon 1 5 1 5 4 2 4 4 2 4 Polygon 1 3 5 3 3 5 1 2 5 Polygon 1
  • 如何读取lucene 5.5.5索引?

    哪个版本的Luke可以读取5 5 5 lucene的索引 我尝试过 Luke 4 10 5 2 5 5 7 2 但总是得到这个 Invalid directory at the location check console for more
  • 两个环绕角度的平均值[重复]

    这个问题在这里已经有答案了 可能的重复 如何计算一组循环数据的平均值 https stackoverflow com questions 491738 how do you calculate the average of a set of
  • Celery 无法在 AWS ECS 中工作

    我使用 docker 将 django 项目部署到 AWS ECS 服务 为了使用 celery 我将rabbitmq 设置为单独的 ec2 服务器 两个带有代理和结果后端的 ec2 问题是 celery Worker 在本地工作 但不在
  • 如何在不同线程中使用实体框架? [复制]

    这个问题在这里已经有答案了 我有一个实体框架dbContext以及对数据库进行一些操作的方法 如何正确地从多个线程调用它以避免死锁 连接错误等 我尝试了不同的方法 但也有很多例外 public void Foo Bar bar using
  • 什么是惰性分配?

    对象的延迟分配是什么意思以及它有什么用 延迟分配简单地意味着直到实际需要资源时才分配资源 这对于单例对象来说很常见 但严格来说 只要尽可能晚地分配资源 就有一个延迟分配的例子 通过延迟分配资源直到您真正需要它 您可以减少启动时间 如果您从未
  • 近似保序霍夫曼码

    我正在做算法和数据结构课程的作业 我无法理解给出的说明 我会尽力解释这个问题 我给出的输入是一个正整数n其次是n正整数 表示有序字符集中符号的频率 或权重 第一个目标是构造一棵树 为有序字符集中的每个字符提供近似的保序霍夫曼代码 我们要通过