我们给了N个对象,其中一个对象恰好具有不同的权重(可以更少或更多)。此外,我们还提供了以下3种类型的M个比较-
其中集合A和集合B(都具有相同数量的对象)是从最初的N个对象开始的对象列表。
给定M这样的比较,如果可能的话,我需要找到重量不同的物体。否则,请说明给定的M个比较列表不足以检测权重不同的列表。
有人可以提出解决这个问题的算法吗?
我认为您可以使用比建议的算法更简单的算法,因为您知道一个对象具有不同的权重。
为每个对象管理两个标志,以指示它们是否可能更重或更轻(因此最初未设置它们)。迭代所有给定的比较并按如下方式设置标志:
现在,您可以通过对对象(即它们的标志)进行一次迭代来找到解决方案,但这有点棘手,因为当您只有相等性并且只有一个对象从未出现在任何比较中时,它必须是解决方案:
初始化solution = null,, noFlagSolution = null.noFlagCount = 0
迭代对象:
noFlagSolution = current,noFlagCount++solution != null:返回null(我们有多个候选人)。solution = current如果solution != null:返回solution(在这种情况下我们还可以判断物体是更重还是更轻)。
if noFlagCount == 1: return noFlagSolution(上面提到的特殊情况,这里我们不知道唯一的候选者是更重还是更轻)。
否则没有唯一的解决方案。