繁体   English   中英

O(k(logk+deg(H)) 时间算法在二叉树中找到第 k 个最小元素

[英]O(k(logk+deg(H)) time algorithm to find kth smallest element in binomial tree

给定二叉树(不是堆),当根的秩为

deg(H) -> means number of nodes = 2^(deg(H)).

找到一个O(k(logk+deg(H))时间算法,在不破坏原始树的情况下返回 k 个最小项的排序数组。

O(klogk)是已知的,但我无法在原始树上执行 delete min。

另外,如果k < Deg(H) ,我如何保证logk

例如 root 有 8 个孩子,并且k = 3 如果我要创建一个新堆,并在那里复制 8 个节点,删除一个项目将是logDeg(H)而不是logk

考虑以下事项: 创建一个新的二叉树。 对于树的 K 个级别,将所有第 K 个级别的节点插入到二叉树中,然后执行 delete-min 正好 k 次。 对于每次插入,插入将花费O(1 ),并且在每个级别,您将在最坏的情况下进行Deg(H)插入。 因此,创建新树需要O(kdeg(H)) 每个删除分钟需要O(logk)并且执行 k 次,因此它将需要O(klogk) 将两者结合将导致所需的复杂性。

创建一个大小为 k 的数组,创建一个名为 T 的新树创建原始根的重复节点:键和指向原始节点的指针将副本插入到 T

迭代 k 次。 在每次迭代中:

  1. 将 minimumNode ofT 的键添加到结果数组
  2. 获取原始最小节点的原始子节点
  3. 获取原始最小节点的等级
  4. 删除 T 的最小值
  5. 对于我们在步骤 2 中得到的每个孩子:像以前一样创建一个副本(键+指向原始的指针),将其插入到 T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM