我正在考虑在一组卡片中找到真实卡片的D& S问题。真实的卡都有相同的代码,假卡有很多代码(可以是相同或不同)。真实卡的数量大于一半。我只能比较两张卡片,看看它们是否有相同的代码,但无法确定代码是什么。
我现在想的是递归地将小组分成小组。然后,我将具有相同代码的卡片放入一组。最后,我只需要找到最大的一组,元素将是真正的卡片。但我真的不知道如何实现它。
答案 0 :(得分:0)
只需为您的目的修改快速排序。
选择一个随机元素作为一个支点,找到3个更小,相等或更大的桶。如果超过一半是相等的,那么你已经完成了。否则扔掉除了最大的桶之外的所有东西并重复。
平均情况为O(n)
。最坏的情况是O(n^2)
。如果需要,您可以使用通常用于快速排序的中位数算法中位数来改善最坏情况。