Algorithm 可能存在错误比较器的排序算法分析?

Algorithm 可能存在错误比较器的排序算法分析?,algorithm,sorting,machine-learning,probability,quicksort,Algorithm,Sorting,Machine Learning,Probability,Quicksort,这是一个有趣的面试问题,我没有通过。 数组具有不同的元素[A1..A2….An](随机顺序) 我们有一个比较器C,但它有一个返回正确结果的概率p。 现在我们使用C实现排序算法(任何种类、气泡、快速等) 排序后我们有[Ai1,Ai2,…,Ain](可能是错误的) 现在给出一个数字m(m

这是一个有趣的面试问题,我没有通过。

数组具有不同的元素[A1..A2….An](随机顺序)

我们有一个比较器C,但它有一个返回正确结果的概率p。

现在我们使用C实现排序算法(任何种类、气泡、快速等)

排序后我们有[Ai1,Ai2,…,Ain](可能是错误的)

现在给出一个数字m(m
  • {A1,A2,…,Am}和{Ai1,Ai2,…,Aim}之间的交集的大小S的期望值是什么,换句话说,什么是E[S]

  • m、n和p之间有什么关系吗

  • 如果我们使用不同的排序算法,E[S]将如何变化

  • 我的想法如下:

  • 当m=n,E[S]=n时,肯定
  • 当m=n-1时,E[S]=n-1+P(Ain中的An)

  • 我不知道如何填写答案,但我认为可以通过归纳法来解决我认为任何模拟方法都可以。

    Hm,如果A1、A2、…、An是随机顺序(如问题中所述),那么所有排序和比较器C的正确性概率实际上并不重要。然后将问题归结为{A1,…,An}的两个随机子集的交集长度的期望值

    S为k的概率为
    (mk)*((n-m)(n-k))/(nm)
    ,其中
    (ab)
    应表示“a大于b”,即从
    a
    元素中选择
    b
    元素的可能性数量。(因为对于第二个子集,我们必须从第一个子集中选择
    k
    元素,从其余的子集中选择
    m-k
    元素。)


    E[S]是修改后问题的
    和(0部分答案:

    • 假设Ai1,…,Aim与初始(随机)数组开始不相交,而是与正确排序的数组Aj1,…,Ajn的前m个值相交。(这似乎更有趣)
    • 让我们进一步假设比较器C是非确定性的
    • 为了简单起见,我们假设所有数组元素都是不同的,n=2^n
    现在这里的部分答案首先限于

    • m=1
    • 排序算法=合并排序
    Aj1是最小的元素。在合并排序中,每个元素被比较ld(n)=n次。当且仅当最小元素在其ld(n)=n次比较中变小时,才会将其排序到第一个位置。因此概率p(Ai1=Aj1)=p^n,它等于m=1时请求的E[S]。因此我们得到

    E[S] = p^ld(n)
    
    这是一个部分的答案

    • m=1
    • 排序算法=冒泡排序,首先将最小的元素放在适当的位置
    如果最小的元素在开始时位于位置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))
    

    一般情况下祝你好运!

    如果你在这里没有得到答案,可以试试,或者算符是确定性的?例如,对于a和b和
    a,结果很大程度上取决于排序算法。如果p<1/2,那么通过增加算法的运行时间,你可以任意提高排序的正确性(只需将每个比较充分重复多次)这个问题不是更精确吗?@kkamilpl我相信比较法对于概率p是正确的,所以,双方都是正确的(>或@vib是的,这将取决于选择的排序算法,因此我们可以选择冒泡排序和合并排序作为第一次尝试。概率确实重要吗?仍然存在一定的正确排序概率。我看不出概率p有什么关系。据我所知,A1,…,An是随机顺序的。在“排序”之后它们的顺序不同,与起始顺序无关,但仅取决于比较器C(也可能取决于排序算法)。如果将Ai1,…,Ain与正确的顺序进行比较,情况会有所不同。但将Ai1,…,Ain与随机开始顺序进行比较。另一种看法是:是的,比较器的概率p影响结果顺序Ai1,…,Ain。但p不影响计算E[s]所需的概率p(s=k)。当比较器是确定性的时,这是无关紧要的,因为Ai1,…,Ain不依赖于初始阶数A1,…,An(也不依赖于排序算法),因此这两个子集是独立的。如果比较器不是确定性的,则结果阶数取决于初始阶数(和算法),但我仍然认为,例如,P(A1=Ai1)=1/n,即与P无关。对:我们真的在与初始随机数组进行比较吗?我以为我们是在与正确排序的数组进行比较,但@coproc是对的,这不是当前问题所说的。但问题不是很有趣。