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