Rat*_*565 4 arrays algorithm median
我有一个n个成对不同元素的数组和一个数字k,其中1 <= k <= n.
现在我正在寻找一种算法,计算k数字与数字数组的中位数的最小绝对差值.我需要线性复杂度(O(n)).
我的方法:
我找到了中位数:
之后:
我不知道我的解决方案是否存在O(n),我是否对这个想法是对的.有人可以验证吗?有人能告诉我如何在O(n)中解决它吗?
你可以像这样解决你的问题:
您可以O(n)使用O(n) nth_element算法找到wg 的中位数.
你循环遍历所有用一对代替的元素:<the absolute difference to the median>, <element's value>.再次使用n= 执行nth_element k.应用此算法后,您可以保证k在新数组中首先具有绝对差异的最小元素.你拿他们的指数和完成!
另一方面,您的算法使用排序,这就成了它O(nlogn).
编辑:请求的示例:
让阵列成为[14, 6, 7, 8, 10, 13, 21, 16, 23].
[8, 7, 9, 10, 13, 16, 23, 14, 21]注意数组没有排序,但中位数(13)仍在中间.[<abs(14-13), 14>, <abs(6-13), 6>, <abs(7-13), 7>, <abs(8-13), 8>, <abs(10-13), 10>, <abs(13-13), 13>, <abs(21-13), 21>, <abs(16-13), 16>, <abs(23-13), 23>.因此我们获得了数组:[<1, 14>, <7, 6>, <6, 7>, <5, 8>, <3, 10>, <0, 13>, <8, 21>, <3, 16>, <10, 23>k是4我们使再次nth_element(使用每对用于比较的第一个元素),将获得:[<1, 14>, <3, 16>, <0, 13>, <3, 10>, <8, 21>, <7, 6>, <10, 23>, <6, 7>, <5, 8>]因此您搜索号码的前4对的第二元素:14,16,13和10| 归档时间: |
|
| 查看次数: |
3665 次 |
| 最近记录: |