猿排序
猿排序 题解
暂时不知道是不是错题
可能只是一种比较啰嗦的理解方式。
保证了 \(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:猴子排序是确有其事。

浙公网安备 33010602011771号