我目前正在研究选择算法,即中位数的中位数。
我遇到了以下两个句子:
在计算机科学中,选择算法是用于查找的算法 列表或数组中的第k个最小数字;
在计算机科学中,中位数的中位数为近似值(中位数) 选择算法,通常用于为 精确选择算法,主要是快速选择算法,用于选择 最初未排序数组的第k大元素。
第k个最小/最大元素是什么意思? 为了使问题更具体,请考虑以下(未排序的)数组:
[19, 1, 7, 20, 8, 10, 19, 24, 23, 6]
例如,什么是第五个最小元素?第五大元素是什么?
答案 0 :(得分:4)
如果从最小到最大对数组进行排序,则第 k 个最小元素是排序后的数组中的第 k 个元素。第 k 个最大元素是排序数组中从末尾开始的第 k 个元素。让我们检查一下Python中的示例数组:
In [2]: sorted([19, 1, 7, 20, 8, 10, 19, 24, 23, 6])
Out[2]: [1, 6, 7, 8, 10, 19, 19, 20, 23, 24]
最小的元素是1,第二个最小的元素是6,依此类推。因此,第 k 个最小元素是从左起第 k 个元素。类似地,24是最大的元素,23是第二大的元素,依此类推,因此第 k 个最大元素是从右起第 k 个元素。因此,如果 k = 5 :
In [3]: sorted([19, 1, 7, 20, 8, 10, 19, 24, 23, 6])[4] # index 4 is 5th from the start
Out[3]: 10
In [4]: sorted([19, 1, 7, 20, 8, 10, 19, 24, 23, 6])[-5] # index -5 is 5th from the end
Out[4]: 19
请注意,您没有必须对数组进行排序以获取第 k 个最小/最大的值。排序只是查看哪个值对应 k 的简单方法。