Java 实现将盖子与大小正确的罐子匹配的算法

Java 实现将盖子与大小正确的罐子匹配的算法,java,matching,Java,Matching,问题:我们得到了一个罐子列表和一个盖子列表(大小相同)。对于每个罐子,至少有一个匹配的盖子,反之亦然。在给出的列表中,盖子和罐子都是随机排列的。我想找到一个高效的算法来返回匹配的盖子和罐子对 我的策略:使用有效的算法(log(n),n=罐子数量=盖子数量)对两个集合进行排序。然后我们可以将它们两个接两个地匹配成一对,我们将其添加到一个列表中,该列表将作为结果输出 唯一限制:罐子不能与罐子相比,盖子不能与盖子相比。可以对罐子和盖子进行比较(jar.compareTo(盖子)或lid.compare

问题:我们得到了一个罐子列表和一个盖子列表(大小相同)。对于每个罐子,至少有一个匹配的盖子,反之亦然。在给出的列表中,盖子和罐子都是随机排列的。我想找到一个高效的算法来返回匹配的盖子和罐子对

我的策略:使用有效的算法(log(n),n=罐子数量=盖子数量)对两个集合进行排序。然后我们可以将它们两个接两个地匹配成一对,我们将其添加到一个列表中,该列表将作为结果输出

唯一限制:罐子不能与罐子相比,盖子不能与盖子相比。可以对罐子和盖子进行比较(jar.compareTo(盖子)或lid.compareTo(罐子))

想法:(快速排序)选择一个关键的罐子,将盖子分为三组: 1) 对于所选参考盖而言,盖过小;2)与此盖匹配的盖(至少有一个这样的盖);3)对于所选枢轴而言,盖过大。不建议为这些子组创建新列表(就像在快速排序中一样),因此我们通过连续交换对LID进行分区(集合具有交换方法)

我相信我们可以选择一个随机的关键盖子,以类似的方式分隔罐子。现在,我认为递归可以对我们已经形成的子列表进行排序

尽管这一策略听起来很简单,但其实施并不是那么简单。我甚至不知道从哪里开始。我需要在子列表中分离递归调用的方法吗?如果不使用f.ex,我怎么能做到这一切。copyOfRange(即复制给定列表的子集)?是否有一个相关的图论问题,已经有了一个现有的实现

提前谢谢你

很好地解释了如何实现快速排序。 它甚至包含一个实现

网站上的一些要点包括:

您的分区方法将只对指定的数组部分进行分区,因此不需要使用copyOfRange创建副本。当它开始时,您将对整个数组进行分区,然后使用递归对枢轴之前和之后的部分进行分区

可以使用随机轴。因为它实际上没有什么区别,所以您也可以放弃随机部分,只使用数组的第一个元素。

很好地解释了如何实现快速排序。 它甚至包含一个实现

网站上的一些要点包括:

您的分区方法将只对指定的数组部分进行分区,因此不需要使用copyOfRange创建副本。当它开始时,您将对整个数组进行分区,然后使用递归对枢轴之前和之后的部分进行分区


可以使用随机轴。因为它实际上没有什么区别,所以您也可以放弃随机部分,只使用数组的第一个元素。

请花点时间阅读,并获取有关提问的提示,这些问题吸引了您所寻找的答案。我不理解这里的接近票和负面评论。对我来说,这似乎是一个被问得很好的问题,也是一个有趣的问题。请花点时间阅读,并获取有关提问的提示,这些问题吸引了你所寻找的答案。我不理解这里的投票和负面评论。对我来说,这似乎是一个问得很好的问题,也是一个有趣的问题。非常感谢!所以对于我的问题,我只需要写两个快速排序方法(也就是分区方法),一个用于我有一个关键盖子的时候,另一个用于我有一个关键罐子的时候?这就是我看起来的样子。非常感谢!所以对于我的问题,我只需要编写两个快速排序方法(以及相应的分区方法),一个用于当我有一个关键的盖子时,另一个用于当我有一个关键的罐子时?这就是它在我看来的样子。