我正在尝试使用Kruskal算法搜索节点的父节点。我的程序工作正常,但我想我已经听说过一种方法,通过在搜索父节点并将其连接到父节点时重构树来提高算法的速度。我很确定我在某个地方听说过这个,也许是在演讲中。谁能刷新我的记忆?
并且,给定了许多数组,当从数组的某个部分搜索最小值和最大值时,可以通过创建数组来计算数组中最小值/最大值的树的名称是什么二进制树,其中每个数组的最小/最大值在O(log N)?
答案 0 :(得分:1)
关于你的第二个问题:我认为你在谈论heap。堆可以在O(1)中检索最小或最大值,并在O(log n)中将其删除。
然而,有一些复杂的数据结构,用于处理完整的列表(即它们不是专为最小/最大访问而设计的)。这些还支持同时访问最小和最大值。一些突出的例子:
关于您的第一个问题:Kruskals algorithm用于计算minimum spanning tree。但是既然你提到“父节点”,我认为你考虑过的结构已经是一棵树。但是如果结构已经是树,Kruskals算法只返回树本身。你能澄清“父节点”的意思吗?
答案 1 :(得分:1)
对于第一个问题,您正在寻找Disjoint-set data structure。
对于第二个问题,我假设您询问范围最小/最大查询。其数据结构为Cartesian Tree。