zoukankan      html  css  js  c++  java
  • 「科技」求欧拉数单项

    这个是老科技了,但还是记一下。

    问题:给定 (n, k),求有多少个 (n) 阶排列 (p_1, p_2, cdots, p_n),满足恰有 (k)(p_i < p_{i - 1})

    分析:(F(n, k)) 表示有小于 (k) 个的方案数,答案就是 (F(n, k + 1) - F(n, k))

    考虑 ([0, 1)) 间均匀随机的实数序列 (a_1, a_2, cdots, a_n)。因为是随机的所以 (a_i) 可以看作互不相同,(a) 序列就可以看作是排列。

    再定义序列 (b_1, b_2, cdots, b_n),满足 (b_i = a_i - a_{i - 1} + [a_i < a_{i - 1}]),其实就是在环上 (a_{i - 1}) 顺时针走到 (a_i) 的距离。根据这个组合意义,可以发现 (b_1, b_2, cdots, b_n) 也是 ([0, 1)) 间的均匀随机数,并且 (a) 满足条件当且仅当 (sum b_i < k)

    缩放一下,令 (b_i)([0, m)) 间的均匀随机数,限制变成 (sum b_i < km)。当 (m o infty) 时,可以假设 (b_i) 都是整数。这样就变成了插板法,推一下式子:

    [egin{align*} frac{F(n, k)}{n!} = & lim_{m o infty} frac{1}{m^n} left[ sum_{i = 0}^{k - 1} inom{n}{i} (-1)^i inom{(k - i) cdot m}{n} ight] \ F(n, k) = & sum_{i = 0}^{k - 1} inom{n}{i} (-1)^i (k-i)^n end{align*} ]

    然后就做完了!

    提交记录

  • 相关阅读:
    Ubuntu 各版本代号简介
    Ubuntu如何同步网络时间
    Ubuntu下修改DNS重启也能用的方法
    provider networks和self-service networks
    openstack 架构
    系统故障排除
    系统日志管理
    系统引导
    网络管理
    Linux下开启FTP服务
  • 原文地址:https://www.cnblogs.com/Alfalfa-w/p/15399865.html
Copyright © 2011-2022 走看看