算法入门——part1.基础知识(递归式、概率)
算法入门——part1.基础知识(下)
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
- 【广告算法工程师入门 15】机制设计-基础知识
- 算法竞赛入门10.2计数与概率基础例题代码
- 数据分析入门_PART1python基础语法_实战项目02基于Python的算法函数创建
- VUE基础知识入门
- salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
- Thrift入门初探(2)--thrift基础知识详解
- 多核程序设计的相关基础知识----以误差扩散算法为例
- 算法的基础知识( Time Complexity & Space Complexity& Big O notation)
- React入门与基础知识(阿里云视频笔记)
- Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
- C入门基础知识
- 堆入门的必备基础知识
- Linux学习笔记一 ---- Linux基础知识认知以及初识Linux下C编程入门
- Java基础知识——Java入门与加深
- 小白入门angular-cli的第一次旅程(学习目标 学习目标 1. 路由基础知识)补充学习
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- Android宝典入门篇-基础知识
- Redis学习笔记之入门基础知识——其他特性
- Python 入门教程--基础知识
- 经典入门:Java初学者入门要注意的基础知识