一尘不染

排序矩阵的选择算法

algorithm

这是一个谷歌面试问题:

给定一个N * N矩阵。所有行均已排序,所有列均已排序。找到矩阵的第K个最大元素。

在n ^ 2中执行此操作很简单,我们可以使用堆或合并排序(n lg n)对其进行排序,然后将其获取,但是有没有比(n lg n)更好的方法?

数组的示例::

 1   5   7  12
 3   6   8  14
 4   9  10  15
11  17  19  20

1 <5 <7 <12和1 <3 <4 <11与其他行和列类似。现在说我们需要找到第十个最小的元素,在这里是11.。希望这为问题添加了一些细节…


阅读 221

收藏
2020-07-28

共1个答案

一尘不染

是的,由于Frederickson和Johnson的缘故,有一种O(K)算法。

Greg N. Frederickson和Donald B. Johnson。 广义选择和排名:排序矩阵 。SIAM
J.计算。13页,第14-30页。http://epubs.siam.org/sicomp/resource/1/smjcat/v13/i1/p14_s1?isAuthorized=no

2020-07-28