Algorithm 高效的多重选择算法

Algorithm 高效的多重选择算法,algorithm,Algorithm,我必须实现一个解决多重选择问题的算法。 选举问题是: 给定一个由n个元素组成的集合S,这些元素来自一个线性有序的集合,以及一个由1和n之间的正整数组成的集合K={k1,k2,…,kr},多重选择问题是为后代的i,1的所有值选择第K个最小的元素:Ivan所指的算法是对K进行排序,然后递归地解决问题,如下所示。使用QuickSelect查找第K个最小元素x,其中i为ceil(r/2),然后在K和S的小半部分以及K和S的大半部分上递归,将K拆分为i,S拆分为x 对于理论著作的作者来说,寻找在简并(这里

我必须实现一个解决多重选择问题的算法。 选举问题是:


给定一个由n个元素组成的集合S,这些元素来自一个线性有序的集合,以及一个由1和n之间的正整数组成的集合K={k1,k2,…,kr},多重选择问题是为后代的i,1的所有值选择第K个最小的元素:Ivan所指的算法是对K进行排序,然后递归地解决问题,如下所示。使用QuickSelect查找第K个最小元素x,其中i为ceil(r/2),然后在K和S的小半部分以及K和S的大半部分上递归,将K拆分为i,S拆分为x

对于理论著作的作者来说,寻找在简并(这里是相等元素)存在的情况下工作的算法通常不是一个优先考虑的问题,因为它使常见情况的表示更加困难,并且通常不会在确定问题的计算复杂性方面发挥作用。这本质上是一个一维问题,黑箱解法很容易;将输入yi的第i个元素替换为(yi,i),并使用第二个分量在比较中打破联系


实际上,我们可以做得更好。与其在{y:y in S,yx}上递归,不如使用一个关于x的三向分区算法(例如,请参见每个足够完整的快速排序处理),然后用索引而不是值来划分数组。

为什么不能简单地使用快速排序对集合进行排序,并直接选择kith元素?不确定我是否理解正确。@AbhishekBansal因为它的平均成本将是Θ(n log n),这比我被要求的汉克斯成本要高,用(yi,I)代替yi,并在比较中使用索引非常有效