微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提高树“查询”的效率

如何解决提高树“查询”的效率

我已经分配了一个关于在通用树上执行某些查询的任务。输入是一个无向连通图,有 N 个节点和 N-1 个弧(基本上是一个树),每个都有一定的成本,目标是回答关于这个结构的 Q 查询。 每个查询都包含图的附加弧(具有给定的成本),并且只有当图中存在可以用它替代的弧(具有更高或相等的成本)时,特定查询的答案才为“是”,保持其中的连通性。
现在,我提出的解决方案使用 DFS 在查询中包含的弧的两端之间的图中找到一条路径:如果这条路径包含更高(或相等)的成本弧,那么答案是是的,否则为否。
所以每个查询都是 O(N),但我需要大幅改进它:我一直在尝试使用内存以某种方式使用先前查询的结果,但到目前为止没有任何效果。你有什么建议?

解决方法

我认为使用不同的数据结构 (max heap) 来存储所有弧会将查询的时间复杂度降低到 O(1) 和替换和恢复最大堆的时间复杂度为 O(logn)(维护堆).

您的新步骤可以是:

  1. 在初始化期间,遍历树(图),并将所有弧保存在最大堆中。时间复杂度为 O(n),因为您必须迭代所有节点。但由于是初始化,所以成本是一次性的。
  2. 在查询过程中,只需检查输入的最大值 堆,时间复杂度为 O(1)。
  3. 如果输入成本大于堆中的最大值,那么您只需返回 NO。 否则,您可以返回YES,并用输入弧替换最大节点,并恢复最大堆。最坏情况下的时间复杂度为 O(logn)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。