您的位置:首页 > 其它

算法入门——part1.基础知识(递归式、概率)

2019-03-29 21:19 134 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/nanashi_F/article/details/88776577

算法入门——part1.基础知识(下)

  • 2.概率分析和随机算法
  • 1.递归式

    一般来说,最坏时间复杂度由递归式给出,为求出其渐进的界以判断复杂度大小,需求解递归式。
    主要有三种方法:代入法、递归树法和主方法。

    代换法

    使用:先猜测某个界的存在,再用数学归纳法去证明该猜测的正确性。
    诀窍:多用于解的形式很容易猜,或者与自己之前记得的递归式相似的情形。

    递归树法

    使用:将递归式转化成树形结构,在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。将递归树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归式所有层次的总代价。
    诀窍:适合用来产生好的猜测,然后用代换法加以验证。

    主方法

    使用:直接给出形如T(n) = af(n/b) + f(n)的递归式的界,如下:

    2.概率分析和随机算法

    背景:雇佣问题

    假设你要雇佣一个新的办公室助理。雇佣代理每天给你推荐一个应聘者,由你面试这个人,如果这个应聘者比目前的办公室助理更优秀,你就会辞掉当前的办公室助理,然后聘用这个新的。面试一个人需付给雇佣代理一笔费用,聘用办公助理也需要费用,并且,当你雇佣一个人时,需要支付给雇佣代理一大笔中介费。你想要预测这种费用。
    可写成伪代码如下:

    HIRE-ASSISTANT(n)
    1 best←0 △candidate 0 is a least-qualified dummy candidate
    2 for i←1 to n
    3   do interview candidate i
    4     if candidate i is better than candidate best
    5       then best←i
    6         hire candidate i

    概率分析

    概率分析是在问题的分析中应用概率技术。大多数情况下,我们使用概率分析来分析一个算法的运行时间。有时候也用它分析其他的量,例如程序HIRE ASSISTANT中的雇佣费用问题。

    在雇用问题中,易知最优候选人先出现显然比后出现所要花费的中介费少。可以假设n个应聘者以能力排序。但是,应聘者以随机的顺序出现,就等于说这个出现顺序是数字1到n的n!种排列中的任何一个,在n!种可能的组合中,每一种都以相等的概率出现。

    随机算法

    在雇用问题中,看起来应聘者好像是以随机的顺序出现的,但是我们无法知道这是否正确。因此为了设计雇用问题的一个随机算法,必须对面试应聘者的次序有更大控制。所以要稍微改变这个模型。假设雇用代理有n个应聘者,而且事先给我们一份应聘者的名单。每天我们随机选择其中一个来面试。
    则需要改动伪代码如下:

    RANDOMIZED-HIRE-ASSISTANT(n)
    1 randomly permute the list of candidates
    2 best←0 △candidate 0 is a least-qualified dummy candidate
    3 for i←1 to n
    4   do interview candidate i
    5     if candidate i is better than candidate best
    6       then best←i
    7         hire candidate i
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: