抽象的概率分析和随机算法的辨析心得

摘要:本篇以雇佣问题为基础简单介绍一下随机算法

随机算法中需要涉及到的就是对输入的概率分析,通过概率得到一个平均的或者是期望的运行时间。设计一个大多数情况下好用的算法。

雇佣问题:现在我们要雇佣一名办公助理,每天我们面试一个人,并要付出代价 C n Cn Cn, 确定雇佣要花费更大的代价 C h Ch Ch,我们决策:任何时候找最合适的人来担任这项职,即若来者比现任者更合适,就辞掉现任雇佣当前的。现在我们想估算一下该费用会是多少?

如果我们假设每天来的面试者是随机顺序出现的(未知并不代表随机),这一假设意味着这n个人出现的分布是n!中的等概率的一种。由此我们可以算的平均情况的雇佣代价(平均情况运行时间)。

但是要是这个假设不成立怎么办呢?通常我们需要再了解一下输入的信息,假设我们知道n个人的名单,但是除此之外一无所知(他们的能力并不知道),而且我们能够选择每天的面试者,则我们可以通过改变输入的顺序,增强随机性来计算代价,通常我们通过随机数生成器来随机输入的顺序,这样得到结果叫期望雇佣代价(期望运行时间)。这种算法叫做随机算法。

随机算法和之前对输入的概率分析有以下不同:

  1. 我们不是假定一个分布,而是设定一个分布,对于输入的分布其实没什么区别,即:没有一个输入会导致特别差的运行结果,也没有一个输入能保证特别好的运行结果,通常我们得到的是基于概率的期望值。
  2. 随机算法是对输入进行(顺序)随机设定,但是算法本身是确定的。
  3. 对于同一个输入,同一个随机算法,每次输出的值(得到的代价)可能不一样。当且仅当随机生成器生成一个“很差”的分布时运行情况才会很差。(这样的概率是很小的)

现在我们对随机算法有了一个感性的认识,不妨介绍两种让输入随机的方法:

  1. 先为每个输入生成一个随机加权,然后进行排序,得到一个随机序列( n ∗ l n n n*ln n nlnn)。
  2. 原址排序,每次从未挑选的输入中随机选择一个,得到一个随机序列。

最后可以尝试求解一下雇佣问题,它的期望运行代价是 C h ∗ l n n Ch*lnn Chlnn.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值