代码之家  ›  专栏  ›  技术社区  ›  NoName

快速选择澄清

  •  -1
  • NoName  · 技术社区  · 7 年前

    “到底是什么意思?” k “在本课程的快速选择幻灯片中?

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  2
  •   DPDP    7 年前

    假设你拿了一个号码 x .

    允许 L 是一组小于 x个 在数组中,集合的大小为 |L|

    允许 E 是一组数字,等于 x个 在数组中,集合的大小为 |E|

    允许 G 是大于 x个 在数组中,集合的大小为 |G|

    让我们想象一下排序后的数组 |L| 数字 (1 -> |L|) 包含在集合中 L .

    以下内容 |E类| 数字 (|L|+1 -> |L|+|E|) 包含在集合中 E .

    以下内容 |G级| 数字 (|L|+|E|+1 -> end) 包含在集合中 G .

    我们正在寻找 kth 最小数量,因此我们有3个案例:

    1) k <= |L| 这意味着我们要找的数字在第一位 |L| 排序数组中的数字,因此我们搜索 kth公司 中的最小数字 L .

    2) |L| < k <= |L|+|E| 这意味着我们要查找的数字介于 (| L |+1->| L |+| E |) 在排序数组中,因此它是 E . 由于 E 等于 x个 ,我们知道 kth公司 最小值等于 x个 .

    3) k > |L|+|E| 这意味着我们要查找的数字介于 (| L |+| E |+1->结束) 在排序数组中,因此它是来自“G”的元素。因为已经有了 |L|+|E| 数字小于 kth公司 最小的数字,我们可以减去 |L |+| E| 从…起 k ,我们叫它 k' ( k' = k - |L| - |E| ),并搜索 k'th 中的最小元素 G .

    推荐文章