偏排序

在计算机科学里,偏排序是排序算法的一个放宽的变种。全排序返回的列表中,每个元素都按一定顺序出现,而偏排序返回的列表中,仅有 k 个最小(或 k 个最大)的元素是有序的。其他元素(第 k 个最小之外) 也可能被就地排序后存储,也可能被舍弃。这常见于流式偏排序中。偏排序最普遍的实例是计算某个列表的 "Top 100"。

就索引而言,偏排序后的列表中,对每一个从 1 到 k 的索引 i ,都有第 i 个元素与全排列后列表保持相同位置:偏排序后列表的第 i 个元素包含了输入列表中的第 i 个顺序统计量。

离线问题
基于堆的解决方案
当 固定时,堆允许一个简单的单次偏排序:向一个最大堆中插入输入中的前 个元素,然后遍历剩余的元素,依次加到堆中,并删除最大的那个。每个插入操作耗时 ,总耗时达 。该算法适合求解第 小的值与配置在线算法.

function partial_quicksort(A, i, j, k)
if i [http://en.cppreference.com/w/cpp/algorithm/partial_sort std::partial_sort]。

参阅

  • 选择排序

参考文献
外部链接

评论 (0)

  • 还没有评论,来抢沙发吧。