【发布时间】:2015-05-04 20:23:46
【问题描述】:
假设有一个元素列表,每个元素都有一个范围,因此元素的值将位于该范围内。元素之间的范围可能重叠。确切的值未知,但可以计算出来。选择具有最高 k 值的元素的最佳算法是什么,使得精确计算的次数最少?
我有一个非常幼稚和直接的算法,但这绝对不是最优的。
- 根据最大范围值对范围进行排序。
- 计算前 k 个值。
- 移除目前最大范围值小于第 k^{th} 个最大值的元素。
- 从剩余元素中,计算具有最大范围值的元素的值,并更新最高 k 列表。如果没有剩余元素,则停止。
- 转到3
【问题讨论】:
-
您的方法实际上看起来很合理。一种可能的改进可能是优化您的排序基础 - 我认为理想情况下您希望按预期值排序,而不是最大可能值。例如,如果值在
min和max之间均匀分布,则可以按(min+max)/2排序。 -
您的问题有些模棱两可:您想
find elements with highest k values还是find k largest elements?将 k 替换为 5 之类的实数,然后阅读并决定您需要哪个并相应地更正问题。 -
我要找k个实际值最高的元素。