面试中这是一个有趣的问题,我没有成功。
数组有 n 个不同的元素[A1 .. A2 .... An](随机顺序)。
我们有一个比较器C, ,但它有一个概率p来返回正确的结果。
现在我们使用C来实现排序算法(任何种类,气泡,快速等)。
排序后我们有[Ai1,Ai2,...,Ain] (可能是错误的)。
现在给出一个数字 m (m {A1,A2,...,Am}与{Ai1,Ai2,...之间的交点大小 S 的期望是什么换句话说,目标是什么是E [S] ? m,n和p 之间的任何关系? 如果我们使用不同的排序算法, E [S]将如何变化? 我的想法如下: 我不知道如何完成答案,但我认为可以通过归纳解决.. 我认为任何模拟方法都可以。
答案 0 :(得分:1)
嗯,如果A1,A2,...,An是随机顺序(如问题中所述),那么比较器C的所有排序和正确概率并不重要。然后将问题简化为期望两个随机子集的交叉长度,每个子集的大小为m,{A1,...,An}。
S为k的概率为(m k)*((n-m) (n-k))/(n m)
,其中(a b)
表示" a b",b
元素从{{ 1}}元素。 (因为对于第二个子集,我们必须从第一个子集中选择a
个元素,并从其余子集中选择k
元素。)
E [S]则为m-k
,后者缩减为sum(0 <= k <= m) k*(m k)*((n-m) (n-k))/(n m)
。这个总和是给出m/(n m) * sum(0 <= k <= m) ((m-1) (k-1))*((n-m) (n-k))
的基本(众所周知的)二项式身份,所以最后得到((n-1) (m-1))
= m/(n m) * ((n-1) (m-1))
。
答案 1 :(得分:0)
修改后问题的部分答案:
现在这里的部分答案首先仅限于
Aj1是最小的元素。在合并排序中,每个元素的比较ld(n)= N次。当且仅当它在每个ld(n)= N比较中变小时,最小元素被分类到第一个位置。因此概率P(Ai1 = Aj1)= p ^ N,其等于m = 1所请求的E [S]。所以我们得到
E[S] = p^ld(n)
这是
的部分答案如果最小元素在开头的位置k(Ak = Aj1),那么需要max(k-1,1)个正确的比较才能将Ak带到前面(Ak = Ai1)。由于所有n个起始位置同样可能,我们得到
E[S] = P(Ai1=Aj1) =
= P(Ai1=Aj1|Aj1=A1)*P(Aj1=A1) + ... + P(Ai1=Aj1|Aj1=An)*P(Aj1=An) =
= 1/n (p + p + p^2 + ... + p^(n-1)) = 1/n ((1-p^(n-1))/(1-p)+p-1) =
= (2p - p^2 - p^(n-1)) / (n(1-p))
一般情况下祝你好运!