您如何在出现N / K次的大小阵列中发现所有整数?
-
29-09-2020 - |
题
我试图找到这个问题的解决方案: 如何在尺寸的排序阵列中找到所有整数,它在更少中出现n / k次数而不是o(klogn)时间?
我只能找到这个问题,其中提供了O(klogn)解决方案。
解决方案
让我们从案例 $ k= 2 $ 开始,并假设算法是基于比较的。
我声称,任何发现均匀元素的算法出现 $ n / 2 $ times必须知道索引 $我$ 这样 $ a [i + 1]= a [i + n / 2] $ 。实际上,假设这不是这种情况,让我们假设 $ a $ 的条目是实数。让我们说该算法已知以下值: $$ [i_1]=cdots= a [j_1] 它与算法的知识一致,即<跨度类=“math-container”> $ a [i_1-1] 等,并且稍微我们可以安排出现没有元素 $ n / 2 $ 时间。
在一般情况下,算法应该知道索引 $ i $ ,使得 $ a [i + 1]对于输出的每个元素,= [i + n / k] $ 。我们可以将阵列分区为 $ k / 2 $ 尺寸 $ 2n / k $ ,并考虑 $(n / k + 1)^ k $ 如以前,其中 $ r $ th元素出现 $ n / k $ 时间是 $ r $ th部分。这给出了 $ \ oomega(k \ log(n / k))$ 的下限,匹配您的上限为几乎所有值 $ k $ 。
(可能会单杠改善算法以提供匹配的上限。)
不隶属于 cs.stackexchange