我们记 fi 表示 val(p)=i 的排列个数,考虑如何计算 fi:
- 对于 ∀1≤j<i,pj≥j;
- 对于 i,pi<i;
- 对于 ∀i<j≤n,没有限制。
我们枚举 pi=j,容易得到:
fi=(n−i)!j=1∑i−1(n−i+2)i−1−j(n−i+1)j=(n−i)!(n−i+2)i−1(j=1∑i−1(n−i+2n−i+1)j)=(n−i+1)!((n−i+2)i−1−(n−i+1)i−1)
显然所有排列的 val(p) 之和为 i=1∑n(i⋅fi)+n+1,将此结果除以 n! 即为期望。
时间复杂度 O(nlogn)。