![](/img/trans.png)
[英]O(klogn) time algorithm to find kth smallest element from a Fenwick-Tree
[英]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 次。 在每次迭代中:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.