如何快速筛选出矩阵中前k大的元素,求一个好的算法?


如何快速筛选出矩阵中前k大的元素,求一个好的算法?
假设有一个mXn的矩阵,我要实现的功能是:
找出矩阵中前2Xsqrt(mXn)个大的元素(得到一个这样的01矩阵,属于前2Xsqrt(mXn)大的元素位为1,反之为0)。
求好的算法,谢谢!

算法 matlab

内心是潮湿的 11 years, 11 months ago

思路是先reshape成一维数组(1行m*n列)
AL = reshape(A, 1, m*n);
然后找到其中第k大的元素:
(函数名我忘了……)
然后
B = zeros(size(A));
B(A >= maxk) = 1;
reshape(B, m, n);

缺点是如果第k大的元素不唯一,这时候的1的个数可能并不是刚好k个。如果要求刚好k个,可以改成先排序,然后赋值。

音无初音_ answered 11 years, 11 months ago

Your Answer