随机选择


14

随机选择算法如下:

输入:一个数组,其中包含(为简单起见,是不同的)数字和一个Ñ ķ [ Ñ ]Ank[n]

输出:该“等级的元素”(即,一个在位置如果进行了排序)ķ kAkA

方法:

  • 如果有一个元素,则将其返回A
  • 随机均匀地选择一个元素(“枢轴”)p
  • 计算集合和- [R = { 一个> p }L={aA:a<p}R={aA:a>p}
  • 如果,返回的等级元素。ķ 大号|L|kkL
  • 否则,返回等级元素[Rk|L|R

我被问到以下问题:

假设,那么您正在寻找中位数,并将 设为常数。在第一次递归调用中,包含中位数的集合的大小最大为的概率是多少?α &Element; 1 / 2 1 α Ñk=n/2α(1/2,1)αn

有人告诉我答案是,理由是“所选的枢轴应介于和乘以原始数组之间”2α11αα

为什么?作为,无论选择哪个元素作为枢轴,都大于或小于原始元素的一半以上。中位数始终位于较大的子数组中,因为分区的子数组中的元素始终小于枢轴。α(0.5,1)

如果支点位于原始数组的前半部分(少于一半)中,则中位数肯定会在后半部分中,因为一旦找到中位数,它就必须位于数组的中间位置,并且如上所述,枢轴之前的所有内容都较小。

如果枢轴位于原始数组的后半部分(元素的一半以上),则中位数肯定会在较大的前半部分,出于相同的原因,枢轴之前的所有内容都被认为较小。

例:

3 4 5 8 7 9 2 1 6 10

中位数是5。

假设所选的枢轴为2,因此在第一次迭代后,它变为:

1 2 ....更大的部分....

在第一次迭代后仅12被交换。数字5(中位数)仍在前半部分(根据枢轴2)。关键是,中位数始终位于较大的一半,它如何有机会停留在较小的子数组中?


我们没有参加您的讲座,所以请解释一下方法。
拉斐尔

不知道您在谈论哪种精度算法,您的问题就难以理解。您似乎在多个方面使用了;我尝试进行编辑,但不确定是否理解其中的含义。请修改,以使问题很清楚。投票关闭直到那时。.5
拉斐尔

它是使用随机方法而不是确定性方法的选择算法。
Amumu '04 -4-18

有许多方法可以随机选择一个元素。
拉斐尔

2
@Amumu:我编辑它来描述算法。在这样的论坛中,并不是每个人都会知道您在说什么,而且存在一种非常不同的随机选择方法,该方法更易于分析。
路易(Louis)

Answers:


12

假设您的数组有元素。您已经注意到,中位数始终在第一个分区之后占较大比例。更大的部分具有大小至多α Ñ如果较小部分具有尺寸至少1 - α ñ。当您选择的枢轴不是最小或最大1 - α n个元素之一时,就会发生这种情况。由于α > 1 / 2,你知道这些都是不相交的集合,所以打不好枢纽之一的概率只有2 - 2 α,和1 -nαn(1α)n(1α)nα>1/222α12+2α=2α1


感谢您的回答。我还有一些不清楚的地方。那么,α> 1/2与不交集有什么关系?我以为,无论子数组大小如何,我们总是用这种方法设置不相交的集。
Amumu '04 -4-18

因为它使,所以1 - α ñ < ñ - 1 - α ñ1α<1/2(1α)n<n(1α)n
路易(Louis)

只是最后一件事:不好/好的支点与此有什么关系?据我所知,好的枢轴通常在25-75范围内(将原始数组从25%-75%拆分),而坏的则不在此范围内,而更糟的情况通常是在原始的开始或结束时数组。但是这个?
Amumu'4

2
在这里,我是说,一个支点是“坏”的,如果它使不是你想要更大的部分大,这是大小。你叫什么不好的对应于α = 3 / 4。我怀疑问题的关键在于您的讲师希望您看到预期运行时间的O 阶数不会因更改α而改变。αnα=3/4O()α
路易(Louis)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.