我正在尝试解决以下算法问题:
假设我们有一个数据结构,允许我们插入元素并删除和写入最小元素。假设我们知道一系列n
命令,所有这些命令要么是I(k)
(插入 k)要么是D
(删除最小值并输出它)。
我们的任务是为每个D
命令决定它将返回哪个数字。例如,对于序列:
I(2) D I(5) I(4) I(3) D D I(1) D D
结果应该是
2 3 4 1 5
目标(或提示)是比复杂性更好O(nlog(n))
,使用 Find-Union 数据结构,它允许我们在 中进行n
make-sets、finds 和 unions O(na(n))
,其中a(n)
是逆 Ackermann 函数。
这不是家庭作业 - 我正在准备考试,并且已经在这个练习中遇到了几个多小时的困难。
我将不胜感激任何进一步的提示
编辑:我忘了添加一个关键假设。我们插入的所有数字都来自范围 1..n
进一步编辑:事实证明我不是第一个遇到这个问题的人;它被称为离线最小问题,任何有兴趣的人都可以在此处进一步阅读