【问题标题】:What does kth largest/smallest element mean?第 k 个最大/最小元素是什么意思?
【发布时间】:2019-12-04 03:50:25
【问题描述】:

我目前正在研究选择算法,即中位数的中位数。

我遇到了以下两个句子:

在计算机科学中,选择算法是一种寻找算法 列表或数组中的第 k 个最小的数

在计算机科学中,中位数的中位数是一个近似值(median) 选择算法,经常用于为 精确选择算法,主要是快速选择,它选择 初始未排序数组的第 k 个最大元素

第k个最小/最大元素是什么意思? 为了使问题更具体一些,请考虑以下(未排序的)数组:

[19, 1, 7, 20, 8, 10, 19, 24, 23, 6]

例如,第 5 小的元素是什么?第五大元素是什么?

【问题讨论】:

  • 如果将数组从小到大排序,则第 5 个最小的元素是排序后的数组中的第 5 个元素。第 5 个最大元素是排序数组中倒数第 5 个元素。 10 是第五小,19 是第五大。
  • 这个问题只是想澄清“kth”在这种情况下的含义吗?
  • 我希望有人能描述the kth element 的含义,而不是说如何找到它。

标签: algorithm


【解决方案1】:

如果将数组从小到大排序,则第 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 的一种简单方法。

【讨论】:

  • 对于第 ?th 元素有很多算法不需要排序,所以如果你进行排序,它会在那个位置,但这并不是这个术语的意思。对于小的 ?,您可以在迭代数组时将 ? 迄今为止最大的元素保留在内存中。
  • @PeteKirkham 我明白你在说什么,可能我会改写我的答案,但是“第 k 个最小的”完全等同于“排序数组中的第 k 个值”,无论是否你排序得到它,OP不是在问算法,而是在问一个定义。考虑到 OP 不确定“第 k 个最小”是什么意思,我认为我目前的答案在描述时很清楚。
猜你喜欢
  • 2019-08-13
  • 2019-04-11
  • 2015-10-06
  • 2020-07-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多