的问题是:查找是否有在出现的阵列的数目超过N/8倍
描述了一种算法,在O(n)的发现的时间,如果存在n个数字,一个阵列出现超过n/8次的数字。
现在我有这就是答案:
我们会做的选择在地方的数字:N/9,2 * N/9,3 * N/9,...,8 * N/9,并且检查这8位候选人中是否有一位出现至少n/8次。
但我不明白为什么会这个算法的工作。
例如,考虑以下数组: [3,3,1,3,2,3,4,3,5,3,6,3,7,3,8,3,9,3] 。
因此,这里n = 18,如果这个算法的候选人将是1,2,4,5,6,7,8,9,当我们检查这些数字是否至少出现n/8次答案将是否定的,但实际上3答案是肯定的。
所以我不明白这是为什么算法正确...
只有重复是相邻的才有意义。 – karakfa
你能帮我找到一个正确的算法吗? – ChikChak
这是一个*作业问题,*不是吗?和你一样,我没有看到为什么你的“答案”实际上会起作用的原因,*除非,*也许,这个载体被认为是**排序的。**我希望你有一个翻译得很好的博士。 Djikstra的*排序和搜索*附近的书架上... –