Algorithm 可能存在错误比较器的排序算法分析?
这是一个有趣的面试问题,我没有通过。 数组具有不同的元素[A1..A2….An](随机顺序) 我们有一个比较器C,但它有一个返回正确结果的概率p。 现在我们使用C实现排序算法(任何种类、气泡、快速等) 排序后我们有[Ai1,Ai2,…,Ain](可能是错误的) 现在给出一个数字m(mAlgorithm 可能存在错误比较器的排序算法分析?,algorithm,sorting,machine-learning,probability,quicksort,Algorithm,Sorting,Machine Learning,Probability,Quicksort,这是一个有趣的面试问题,我没有通过。 数组具有不同的元素[A1..A2….An](随机顺序) 我们有一个比较器C,但它有一个返回正确结果的概率p。 现在我们使用C实现排序算法(任何种类、气泡、快速等) 排序后我们有[Ai1,Ai2,…,Ain](可能是错误的) 现在给出一个数字m(m
我不知道如何填写答案,但我认为可以通过归纳法来解决我认为任何模拟方法都可以。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是对的,这不是当前问题所说的。但问题不是很有趣。