仅使用相等性比较的唯一元素数

问题描述

如果只能在两个元素之间使用相等比较,有没有一种方法可以在比O(n ^ 2)更快(最坏的情况下)的运行时间内查找列表中唯一元素的数量?不允许删除,复制或对元素进行其他索引编制(除了循环遍历它们进行比较之外)。我们基本上不知道元素的值是什么,我们只能判断它们中的两个是否相同。没有有关元素分布的更多信息,您不能仅假设整数。

我能做的最好就是蛮力-将当前元素与所有先前的元素O(n ^ 2)进行比较,但是我不确定如何证明这是最佳的运行时间。 / p>

解决方法

如果一个列表包含N个元素,并且只有一个重复元素,那么就有N(N-1)/ 2个可能的元素对可以进行相等比较,而这些对中只有一个会比较相等。

因此,对于任何据称可以计算不同元素的算法,对手都可以为其提供N个不同元素的列表,并观察其进行的比较以及提供的答案。然后:

  • 如果算法给出的答案不是N,则说明是错误的。
  • 否则,如果算法进行的比较少于N(N-1)/ 2,则至少有一对未比较。对手可以将这两个元素设置为相等,然后再次运行算法。由于它进行的所有比较将具有相同的结果,因此它将再次给出答案N,但这一次将是错误的。

因此,任何总是少于N(N-1)/ 2个比较的算法都必须为至少一个输入返回错误的答案。