浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法
浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法
众所周知,把[0,1]区间内的n个随机、相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\forall i<n, x_{p_i} < x_{p_{i+1}}\),那么有一个结论是所有的排列都是等概率出现的,这完全不难理解,因为所有的变量都是可以轮换的。
但是,题目显然不会这么简单,有些题目会给一定的条件限制,例如强制一些偏序关系\(p_u<p_v\),对于这种情况,一般要求给定的偏序拥有特殊性质(例如一颗森林)才能做,并且可以通过常规的组合方法得到(对于森林的情况,合法的概率是\(\prod_{i} \frac 1 {i的子树大小}\))。但是对于这类问题的一些扩展,传统的组合方法便显得十分复杂,需要更加简洁,适用性更广的代数方法———对这些变量进行积分以得到答案。
CTS2019 day1t1随机立方体
这个题目也是求一个排列,并且求满足某种排列的方案数。
注意到题目中要求的恰好k个极大的数的概率不太好算,考虑容斥掉这一条件。
我们强制k个极大的数,剩下的数没有限制,那么对于一种有l个极大数的方案,显然我们会算\(\binom l k\)次,直接二项式反演即可。
现在问题变成了如何算强制k个极大数的方案数。极大数这个概念较为复杂,我们尝试着将其变为简单的偏序关系。首先先枚举k个极大数,并且确定好这k个极大数之间的偏序关系,然后根据极大数的定义我们可以得到某个极大数与其他数的偏序关系。不难发现这个偏序关系本质上是一条链套一堆菊花,那么我们可以很方便的维护这个偏序关系的贡献。
CTS2019 day2t3氪金手游
题面
对于此题,我们相当于枚举一个合法抽卡顺序,根据这个抽卡顺序来计算概率。
这个顺序与排列有点像,唯一的不同是这个概率的计算是加权的,即若抽卡顺序的排列是\(\{p_i\}\),那么对答案的贡献是\(\prod_{i=1}^n {w_{p_i} \over \sum_{j=i}^n w_{p_j}}\)。
一种方法是强行转成与排列类似的问题,把问题转化成有n种颜色,每种颜色有\(w_i\)个不同的球,令某种颜色的第一个球的位置为\(T_i\),\(T_i\)需要满足某种偏序关系(基图为树);或者是倒着从大到小自底向上地考虑抽卡顺序。这两种方法都需要用到容斥,原因是偏序关系并不构成一个外向树,所以无法直接算。但是下面提到的积分法就不需要考虑这么多,这种大一统的思想利用随机变量显得无脑却十分有效。
我们令\(g_1(x)=1,g_2(x)=2(1-x),g_3(x)=3(1-x)^2\)
答案便为\[\int_{0}^1 g_{w_1}(x_1) {\rm d} x_1 \int_{0}^1 g_{w_2} {\rm d} x_2......\int_{0}^1 g_{w_n}(x_n) {\rm d} x_n \prod [x_{u_i} < x_{v_i}]\]
只需要证
\[\int_{0}^1 g_{w_1}(x_1) {\rm d} x_1 \int_{0}^1 g_{w_2} {\rm d} x_2......\int_{0}^1 g_{w_n}(x_n) {\rm d} x_n \prod_{i=1}^{n-1} [x_{p_i}<x_{p_{i+1}}] = \prod_{i=1}^n {w_{p_i} \over \sum_{j=i}^n w_{p_j}}\]
可以轻松用归纳证明。
我们任选一点为根,直接对答案的式子自底向上的进行积分即可。
题目中\(w_i=j\)的概率为\(p_{ij}\),这样的话我们直接令i的函数\(f_i(x)=\sum_{j=1}^3 p_{ij}g_j(x)\)即可。
浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法的更多相关文章
- 浅谈css的行内类型标签和块级标签
常用标签的行内类型标签有:a.span.img:块级标签有:div.p.h1~6.ul.ol.li.dl.dt.dd. 行内类型标签的特征:标签的大小由标签的内容决定,不能设置width和height ...
- [0, 1] 区间内 n 次独立随机事件的一些问题
问题一 证明:一根1米长的绳子,随机切成 $N$ 刀,变成($N+1$)根绳子,则最短的一根绳子长度的期望为 $\displaystyle \frac{1}{(N+1)^2}$. 证: 引理:当分成 ...
- 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...
- 浅谈UML中类之间的五种关系及其在代码中的表现形式
本文转载:http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html 什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种 ...
- 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)
软件开发的目的是在规定成本和时间前提下,开发出具有适用性.有效性.可修改性.可靠性.可理解性.可维护性.可重用性.可移植性.可追踪性.可互操作性和满足用户需求的软件产品. 而对于整个开发过程来说,开发 ...
- 浅谈C++三种传参方式
浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...
- 浅谈Java线程安全
浅谈Java线程安全 - - 2019-04-25 17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...
- 浅谈android代码保护技术_ 加固
浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...
随机推荐
- Gordon家族(二)
本文是 Gordon家族(一) 的续集. 16. GoLearn 介绍:Gordon博士为Go开发者提供了一系列机器学习的库,开箱即用. 地址:https://github.com/sjwhitwor ...
- 二、hexo+github搭建个人博客的简单使用
使用hexo+github搭建一个可以外网访问的个人博客,此文用于记录博客初级的使用方法. 新建-编写-生成-部署文章的全过程 1.使用cmd完成 打开命令提示符[win+r输入cmd] 切换到自己本 ...
- python输入一个字符串,输出翻转后的字符串(翻转字符串)
题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 string=input('请输入一个字符串:') lst=list(stri ...
- linux系统下使用nginx反向代理asp.net core,并配置免费的https证书
反向代理是为动态 Web 应用提供服务的常见设置. 反向代理终止 HTTP 请求,并将其转发到 ASP.NET Core 应用. 1.在asp.net core项目中的Startup的Configur ...
- Jquery ajax与asp.net MVC前后端各种交互
1.Jquery通过ajaxSubmit提交表单 if (jQuery("#Edit_from").validate().form()) { jQuery("#Edit_ ...
- 构造命题公式的真值表--biaobiao88
对给出的任意一个命题公式(不超过四个命题变元),使学生会用C语言的程序编程表示出来,并且能够计算它在各组真值指派下所应有的真值,画出其真值表. #include<iostream> usi ...
- SQL Server Compact 3.5环境部署<转>
通过使用 Microsoft Visual Studio 开发环境,可以开发使用 SQL Server Compact 3.5 的应用程序.Visual Studio 是开发和部署使用 SQL Ser ...
- OPATCH在线补丁
如果补丁中有online目录就是在线补丁,不需要数据库停机,在线的又分集群和非集群,如下 查看readme可以得知在线补丁打法 $ cat README.txt Oracle Database 11g ...
- Shell 编程 until语句
本篇主要写一些shell脚本until语句的使用. 计算1-50的和 #!/bin/bash i=0 s=0 until [ $i -eq 51 ];do let s+=i;let i++ done ...
- Chrome无界面启动使用
Method1: from selenium import webdriver # 创建chrome参数对象opt = webdriver.ChromeOptions() # 把chrome设置成无界 ...