【问题标题】:Algorithm that returns j'th smallest element from two sets从两个集合中返回第 j 个最小元素的算法
【发布时间】:2020-03-13 07:04:30
【问题描述】:

我有一个任务要求从两个大小相等的集合 M 和 N 中 j 持有不同的数字,只能访问函数 kthsmallestM(int k) 和 kthsmallestN(int k),它们返回分别从 M 和 N 中找到第 k 个最小的整数,算法应该从 M+N 中找到第 j 个最小的元素。

使用蛮力执行此操作的方法相当明显,但该算法应该在 O(log j) 调用 kthsmallestM 或 kthsmallestN 的情况下运行。我不是在寻找一个完整的解决方案,但我已经坚持了一段时间,所以只要一些让我开始的指针将不胜感激!

我尝试过的: 检查 M 的最大元素是否小于 N 的最小元素,反之亦然,在这种情况下,答案将只是 M 或 N 的最大元素,具体取决于具体情况。我尝试使用它来创建一个递归算法,该算法对两组中较小的元素执行相同的检查,但很快就会变成 O(n)。

有什么建议吗?

【问题讨论】:

标签: algorithm set divide-and-conquer


【解决方案1】:

k 个最小的元素将包括 M 中最小的一些 x,以及 kx 个最小的元素来自N

如果我们对 x 进行猜测,那么我们可以使用 kthsmallestM(x), kthsmallestN(kx), kthsmallestM (x+1)kthsmallextN(k+1-x),看看我们的猜测是太低、太高还是刚刚好。

这意味着我们可以进行二分查找来找到 x 从 0 到 j 的正确值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多