有没有在Matlab中以高效的方式查找长度为n的向量中第m小的数?我是否必须使用sort()函数?谢谢和问候!
n
个元素,你可以使用选择算法和中位数算法,在O(n)
时间内得到一个解决方案。编辑 2: 正如 Eitan 指出的那样,答案的第一部分并没有解决寻找最小 m-th 值的问题,而是关于最小值之后的第 m 个元素。其余部分的答案仍然有效...为 Eitan 的敏锐给予 +1。
虽然 sort
可能已经非常高效了,但你可以尝试看看是否可以使用 find
更好。例如:
id=find(X>min(X),m,'first');
id(end) % is the index of the smallest m-th element in X
find
添加了功能,可以让你找到符合某些条件的“第一个”或“最后一个”元素。例如,如果你想找出数组X
中小于值y
的前n
个元素,使用find(X<y,n,'first')
。O(n)
时间内得到你需要的解决方案。(与@DDD指出的类似)id(end)
是 X 中第 m 小元素的索引。我假设从那里获取值 X(id(end))
是显而易见的。 - blaX
中第_m_个大于min(X)
的值不一定是X
中第_m_小的数字。例如,取m = 2
和X = [9 9 1 2]
。你的解决方案得出的结果是9,而我认为正确答案是2。 - Eitan TA = randi(100,4000,1);
A = sort(A,'ascend');
m = 5; % the 5 smallest numbers in array A
B = A(1:5);
我希望这能帮到你。
sort
吗?”这并不直接意味着有其他方法。 - fpe