什么是将n个项目与相应的n个项目匹配的有效方法

时间:2013-10-02 20:15:12

标签: algorithm data-structures

考虑一组N瓶并设置N个瓶盖的B,这样A中的每个瓶子在B中都有唯一的瓶盖。 但A中的瓶子和B中的瓶盖看起来都一样。可以做的唯一比较是A中瓶子的对(a,b)和B中的瓶盖,并测试a的螺纹是否更小,更大或完美,螺纹为b。

提供一种有效的算法,将所有瓶子与瓶盖相匹配。

PS:这似乎我没有做任何事情来解决问题,相信我,我做到了。请给我一个答案。

1 个答案:

答案 0 :(得分:1)

不错的问题但是因为在它看起来像家庭作业之前已经指出了,为什么你不尝试这样的事情:

你应该为每个瓶子循环(没有任何逻辑顺序) 你应该有一种结构是一种动态排序的大写集合数组,这个数组初始化只有一个元素(即集合B)。

并且对于每个瓶子,当你获得“潜在的”上限时,你应该使用二进制搜索在你的阵列中旅行,你可以检查上限

  • 如果帽子较小,则将其放入同一套装中(标记为不再使用该瓶子
  • 对于第一个更大的上限,您需要在当前集合和下一个集合之间插入一个集合并将其设置在那里
  • 以下更大的上限,您将它们放在先前创建的集合
  • 如果你找到了正确的盖子,你就会有一个匹配并继续用相同的瓶子拆分该套装的剩余盖子,之后再继续使用下一个瓶子
  • 如果在当前设置中你没有找到任何上限,但是你检查的所有上限都更大,你可以使用二分搜索来降低上限
  • 如果在当前设置中你没有找到任何上限,但你检查过的所有上限都较少,你可以使用二进制搜索来获取更大的上限

编辑:我已经看到了发布的内容,实际上它是重复的 Two sets of items. Each element of set A a unique match in set B. Match each item of set A to item in set B in O(nlogn) time 这里解释了解决方案 http://www.wisdom.weizmann.ac.il/~naor/PUZZLES/nuts_solution.html

与我的相似,但瓶子也可以分开。