概率分析和随机化算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41739364/article/details/102089555

前置知识

【随机变量】:在郑骰子等与概率有关的问题中,我们想要定量的思考这些问题,就需要一个叫“随机变量”的武器。

就像数学题的时候会考虑变量,把 xxx 设为 x,把 xxx 设为 y,而后导入变量,建立方程,解方程。

举个例子。

  • 将郑 1 次骰子出现的点数设为随机变量 x
  • 将郑 10 次硬币出现正面的点数设为随机变量 y
  • 将不断抽签直到中奖时所需的抽签次数设为随机变量 z

在郑骰子中,骰子的点数设最基本的随机变量。而郑骰子的行为被称为“随机实验”。

【随机实验】:是在相同条件下对某随机现象进行大量重复观测,目的是研究随机现象的统计规律性,满足:

  • 一次试验结果的随机性;
  • 全体测试结果的可知性;
  • 可重复性。

无论什么东西,只要是通过随机试验确定的实数,都是“随机变量”。

【期望】:期望可以看作“求随机变量的平均值”。

随机变量的期望 E[x] 定义如下:用概率加权再求和,用数学语言表示:

                          E[x]=\sum_{k=0}^{\infty }c_{k}*Pr(x=c_{k})

扫描二维码关注公众号,回复: 7582634 查看本文章

其中,

  • c_{0},c_{1},c_{2},\cdots ,c_{k},\cdots 表示随机变量 x 的取值;
  • Pr(x=c_{k}) 表示随机变量 x 等于值 c_{k} 的概率;

【线性法则】:和的期望等于期望的和,用数学语言表示:

                          E[x]+E[y]=E[x+y] (假设 x,y 在同一个样本空间)

另外,对于任意常数 k,常数倍的期望等于期望的常数倍:

                         E[k*x]=k*E[x]

和的期望等于期望的和,这一性质意味着:求和符号 \sum (~) 与期望符号 E[~] 可以互换。

而且期望的线性法则对任何概率分布函数都无条件成立。

【随机指示变量】:为所有情况设置一个值,用于计数很方便。

比如。

  • 扔硬币只有正面或反面,将正面设为 1,反面设为 0(正+反=1);
  • 扔骰子有六面,每种情况设为 1/6,六面相加等于 1;

在第 k 次抛硬币时,如下定义随机变量 x_{k}

  • 若硬币为正面 x_{k} = 1;
  • 若硬币为负面 x_{k} = 0;

正面为 1,反面为 0 的随机变量就是指示器随机变量

x_{k} 的 k 是指:k = 1, 2, 3, ... n,指示器随机变量 x_{k} 的总和等于随机变量 x

x = x_{1}+x_{2}+x_{3}+...+x_{k}x_{1} 表示抛第 1 次,x_{k} 表示抛第 k 次。

正面为 1,反面为 0,将抛 k 次的结果相加,我们就知道了一共出现了几次正面~


雇用问题

     假设您要雇用一名新办公助理,您先前的雇用尝试都没成功。于是,您决定找一个雇用代理,雇用代理每天给您推荐一位应聘者。

您会面试这个人,而后决定是否雇用TA。您必须支付雇用代理一笔小费,除此之外,要是某天真的雇用一个应聘者需要花更多更多的钱呢,因为您必须辞掉目前的办公助理,还需要给中介一大笔钱。

您承诺任何时候,都要找最合适的人来担任这项职务;因此,您决定在面试完每个应聘者后,如果该应聘者比目前的办公助理更合适,就会辞掉当前的办公处理,而后聘用新人,您愿意为该策略买账,但希望能够估算出该费用。

  • 其实我感觉,就是比武招亲啊,最后站在擂台上的只会有一人喽,这一个人就是不断的比较出来的。

算法导论给了一份伪代码表示该雇用策略:

雇用一个 0 号应聘者,做为哨兵,从 1 号到 n 号应聘者中挑选,一共经过 n 次面试选出。

Winer = A[0];    // 哨兵位(擂主)
for(int i=1; i<A.size(); i++)    // 遍历 1 - n 号应聘者
    if( A[i] > W )               // 一一和哨兵位(擂主)切磋,如果赢了哨兵位
        best = i, Winer = A[i];  // 那就当哨兵位(擂主),且雇用ta

雇用问题中,我们不分析算法的运行时间,而是面试和雇用带来的开销。

不过,分析费用开销和分析运行时间所采用的分析技术是相同的,在任何情形下,我们都是在就计算特定基本操作的执行次数。

设面试费用为 c_{t},雇用费为 c_{h}。(解雇+招人,雇用费分俩部分,因此费用占比大),

若我们面试了 n 次,雇用人数是 m,则该算法的总费用是 O(c_{t}n+c_{h}m)c_{t}n 是面试部分,c_{h}m 是雇用部分。

最坏的情况(花的钱最多也就是每个人都雇用了一次):c_{h}n

但这种情况出现的概率很小,我们一般回取一个平均情况。

那我们先看看这种情况,为每个应聘者给出排名 r_{i},于是序列 <r_{1},r_{2},...,r_{n}> 是 <1,2,...,n> 的排列。

假设:这是一个均匀的随机排列,每一个出现的概率恰好是 \frac{1}{n!}

这种分析是假设出来的,现实是不是这样还不好说,因此我们加入随机技术取一个没有使用任何主观分类的标准输入。


随机化算法

大规模随机分组的好处就在于,因为没有使用任何主观分类标准,那就不管您有什么干扰因素,这个干扰因素在两个组里的强度应该是大致相同的。

只要实验的样本量足够大,随机分成的两组之间就不会有本质的差异。

这是一个天才的设想,能够排除一切干扰因素!!!

科学家的方法也就是控制变量和做随机实验,但其实随机技术之上还有一层技术:do-算符,和哲学家有些关系。

本文,主要写的是随机技术,不涉及其他。

随机化算法的关键在于,将次序随机处理,随机挑选应聘者,以达到一个均匀的随机排列。

随机化算法最依赖的便是:随机数生成器(一般是伪随机数)。

我们需要的就是一个等概率的随机数生成器,给定 a,b,等概率生成 <a,a+1,...,b> 任意一个整数。

这类算法有专门的运行时间分析,叫 “期望运行时间”,另一种就是“平均情况运行时间”。

期望运行时间:经过随机化技术处理之后,算法的运行时间就依赖于随机数生成器,运行时间就变成了一个随机变量,关于这个变量求ta的期望时间,就叫“期望运行时间”,而这个时间的分析是建立在概率论之上的。

我们就可以使用概率上的指示随机变量来分析雇用问题。


随机指示器

假设输入分布是随机次序(后面我们会使用随机化方法去掉这个假设),我们要分析的是:

E[X]=\sum_{x=1}^{n}*P_{r}{X=x}

X_{i} = I[ 第 i 号是否被雇用 ],情形只有俩种 雇用 或 不雇用。

X = \sum_{i=1}^{n}X_{i}Pr[ 被雇用 ] =\frac{1}{2}

E[X]=\sum_{i=1}^{n}E[X_{i}]=1+\frac{1}{2}+...+\frac{1}{n}= ln~n+O(1)

图像是一个定积分,算出来大概是 ln~x

雇用的次数:m......


猜你喜欢

转载自blog.csdn.net/qq_41739364/article/details/102089555