computer-science - 比较两个二叉堆是否相等的最著名的界限是什么?
问题描述
特别是在不修改输入的情况下。
到目前为止,我在这方面找不到任何东西,我想知道它是否有比明显的 O(n log n) 时间更好的解决方案。
解决方案
根据您的定义,如果两个堆在重复提取最大元素时产生相同的元素序列,则它们是相等的。由于这相当于对堆中的元素进行破坏性排序,因此相等也等同于说两个堆元素序列在排序时是相等的。但这相当于两个堆之间的多集相等。
检查多集相等性可以在 O(n)(摊销)中完成,例如,通过使用哈希表将第一个堆的每个元素映射到其频率,这可以在 O(n) 中非破坏性地完成,然后检查第二个堆的元素针对哈希表,这也可以在 O(n) 中完成。
由于不考虑每个元素至少一次就不可能检查相等性,因此 O(n) 也是检查两个二叉堆相等性的最严格界限。
推荐阅读
- java - JPA/Hibernate 只加入一个选定的列
- php - How to insert data from html table to database using laravel
- jmespath - JMESPath - 无法查询另一个列表中的列表中的值
- visual-studio-2019 - 运行“Devenv.exe /setup”命令后 Devenv.exe 崩溃
- flutter - Dart 简单的字符串编码器/解码器
- nuget - Myget 服务器将 Nuget 包许可证显示为 UnKnown
- angular - 如何将 HttpRequest 的值直接返回到变量中
- git - 让git在本地忘记文件但在线记住
- python - 如何在水平 Seaborn 条形图上注释文本?
- c# - MvxObservableCollection 不更新 UI