猿排序

猿排序 题解

题目链接

暂时不知道是不是错题


可能只是一种比较啰嗦的理解方式。

保证了 \(a_i\) 互不相等,离散化变成排列,设为 \(p\)

打乱排列本质上是进行了若干次置换。考虑把排列拆分若干个环,即连边 \(i\to p_i\) ,当所有的环都是一元环时,排序完成。我们只要让非一元环数尽快减少即可。

引理:存在一种最优解中,每次随机打乱的位置集合恰好是一个完整的环。

感性理解一下,不太会证。

因此,设 \(f_n\) 表示将一个 \(n\) 元环归位的期望步数。边界为 \(f_1=0\)

转移会将这个环直接打乱,与初始状态无关。于是设 \(g_n\) 表示将 \(n\) 个数归位的期望步数,里面包括了取到每一种排列的概率。即有 \(f_n=1+g_n 。\)

转移 \(g_n\) ,枚举一下第一个环的大小。

并引入 $ P_{n,m}$ 表示 \(n\) 排列,第一个环大小为 \(m\) 的概率。

\[g_n=\sum_{i=1}^n (f_i+g_{n-i})\times P_{n,i} \]

解决一下 $ P_{n,m}$ ,

\[P_{n,m}=\dfrac{\dbinom{n-1}{m-1}(m-1)!(n-m)!}{n!} \]

\[=\dfrac{1}{n} \]

这是最神奇的部分。

于是

\[n\times g_n=\sum_{i=1}^n (f_i+g_{n-i}) \]

\[=\sum_{i=1}^n f_i +\sum_{i=1}^{n-1}g_i \]

代入 \(f_n=g_n+1,f_1=0\)

\[n\times g_n=2\sum_{i=1}^{n-1}g_i+n-1+g_n \]

\[g_n=n-1 \]

\[f_n=n \]

把所有没归位的环加起来。更进一步,答案就等于没归位的数个数。

另外,有一种更好理解的策略:每次把所有没归位的全部打乱。答案是一样的,但是式子比较难推,会用到错排相关内容。

PS:猴子排序是确有其事。

posted @ 2022-06-02 19:53  Sherlockk  阅读(36)  评论(0)    收藏  举报