Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在算法中使用Find Union数据结构_Algorithm_Data Structures_Union Find - Fatal编程技术网

Algorithm 在算法中使用Find Union数据结构

Algorithm 在算法中使用Find Union数据结构,algorithm,data-structures,union-find,Algorithm,Data Structures,Union Find,我试图解决以下算法问题: 假设我们有一个数据结构,允许我们插入元素,删除并写入最小元素。假设我们知道一系列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 目标(或提示)是使用Find Union数据结构实现优于O(nlog(n))的复杂性,该结构允许我们在O(na(n))中进行n集、查找和联合,其中a(n)是逆阿

我试图解决以下算法问题:

假设我们有一个数据结构,允许我们插入元素,删除并写入最小元素。假设我们知道一系列
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
目标(或提示)是使用Find Union数据结构实现优于
O(nlog(n))
的复杂性,该结构允许我们在
O(na(n))
中进行
n
集、查找和联合,其中
a(n)
是逆阿克曼函数

这不是家庭作业——我正在准备考试,这项练习已经有两个多小时的困难了

如果有任何进一步的提示,我将不胜感激

编辑:我忘了添加一个关键假设。我们插入的所有数字都在1..n范围内


进一步编辑:事实证明,我不是第一个遇到这个问题的人;它被称为离线最小问题,任何感兴趣的人都可以做进一步的阅读

不确定这个观察是否有用,但有时约束有助于创造力:很明显,命令
I(k1)I(k2)。。。我(kn)D。。。D
相当于通过
kn
k1
进行排序,仅使用比较无法在快于
O(n log(n))
的情况下进行排序。所以在某个时候,你必须对看起来不像比较的键执行一些操作。@DanielWagner
Edit:我忘了添加一个重要的假设。我们插入的所有数字的范围为1..n
。这放松了常规案例排序的限制。不确定union find数据结构如何帮助降低时间复杂性!你提出这个问题了吗?这个问题对我来说毫无意义。在这种情况下,优先级队列就是合适的工具。这会给你O(n logn)的复杂性。目前还不清楚问题陈述中的什么技巧或漏洞可以使union find数据结构更高效。如果你说数字取自集合[1…n],那就不是同一个问题了。您应该声明每个数字只插入一次!不确定这个观察是否有用,但有时约束有助于创造力:很明显,命令
I(k1)I(k2)。。。我(kn)D。。。D
相当于通过
kn
k1
进行排序,仅使用比较无法在快于
O(n log(n))
的情况下进行排序。所以在某个时候,你必须对看起来不像比较的键执行一些操作。@DanielWagner
Edit:我忘了添加一个重要的假设。我们插入的所有数字的范围为1..n
。这放松了常规案例排序的限制。不确定union find数据结构如何帮助降低时间复杂性!你提出这个问题了吗?这个问题对我来说毫无意义。在这种情况下,优先级队列就是合适的工具。这会给你O(n logn)的复杂性。目前还不清楚问题陈述中的什么技巧或漏洞可以使union find数据结构更高效。如果你说数字取自集合[1…n],那就不是同一个问题了。您应该声明每个数字只插入一次!