算法课堂笔记13—Online Algorithm
今天的算法课是学习离线算法,在计算机科学中,一个在线算法是指它可以以序列化的方式一个个的处理输入,也就是说在开始时并不需要已经知道所有的输入。相对的,对于一个离线算法,在开始时就需要知道问题的所有输入数据,而且在解决一个问题后就要立即输出结果。例如,选择排序在排序前就需要知道所有待排序元素,然而插入排序就不必。
举的例子有:1.沿城墙走找门。2.发扑克牌,最大点数。3.选择item.
听到的重点是:1. Competitiveness的概念。2. 老师反复提到的adversary。
Competitiveness,简单来说就是我们设计的算法的收益,代价什么的和最优算法的比值,用这个来衡量我们算法的好坏。对于最优算法OPT,我们并不知道它具体是什么,只知道有这么个算法能得到最优结果。对于如何考虑离线算法,因为不知道全局的情况。 可以考虑有一个敌人(adversary),总是让我们的算法陷入最坏的情况,让我们达不到好的Competitiveness,下面以例子说明。
例子1:一座城墙,有一个城门,初始你在城墙的某个地方,你想到城门那,在你左边或者右边,你不知道城墙的具体位置,方向。这个时候如何走才能使你找到城墙的时候走的距离最小呢?
因为不知道全局情况是什么,所以这里想要设计出比较好的算法比较困难,所以,对于离线算法,首先考虑的是最优算法OPT是什么,再来看看它会怎么“整“你。对于最优算法来说,因为它是知道全局情况的,所以对于他来说直接走到门那里就ok了,假设初始位置离城门的位置是y,那么最优算法OPT走的距离就是y。最优算法我们知道了,现在想的是有个adversary会怎么使我们的算法更坏,使我们的算法走多少个y呢?
假设我现在定的算法是朝着某一方向,加入是左边走x距离,如果没找到门则折回并往反方向右走2x距离,再没找到就再折回,往反方向走上一个距离的2倍。如果是这样的算法的话,那么这个adversary会怎么整我们呢?它可能会将城门的位置设置在x+ε(ε很小)或者设置在与我们走的初始位置反方向的2x+ε处(这里开始我有疑问,为什么不把城门的位置设大点好让我们的算法对此来回走,后来用笔计算了下,这样我们的最优算法OPT也会变大,ALG/OPT的结果反而变小,这不是adversary所希望的)。那么Competitiveness的情况如下:
即Competitiveness的最优值会接近8,就是说最多会走最优解的8倍距离。老师也说了,可以将往回走的值设为3倍及以上也可,计算出来的结果表明取2倍的距离会得到最好的Competitiveness。
例子2:发扑克牌问题,大致意思(我没听错的话)就是adversary从一副扑克牌中依次选10张牌,每次选出一张给你要还是不要,你只能要一张。对于最优算法OPT来说,因为它知道全局情况他可以任意依次选10张牌,但是他的目的是使你的Competitiveness尽可能不利,即这里的adversary的目标是使你选较小的牌,而最优算法会选较大的牌从而使Competitiveness变大(OPT/ALG),那么它的策略是在前九张不会放较大的数字,比如说一直放4,你可能犹豫不觉,到了倒数第二张,如果你选了4,那么adversary就放13(k)。如果你不选4,那么最后一张就放1,这两种情况下的Competitiveness分别为13/4和4/1.
这样总结的到的结论是:对于在线算法,因为没办法知道全局情况(事先的全部输入),所以不可能好过最优算法,我们要考虑的是最坏的情况下怎么取得较好的Competitiveness
例3:工作调度问题(据说是谷歌的面试题),题目的意思我好想理解的有问题。。。。。。,这里暂且不分析了,以后自己搞明白了再回来写
算法课堂笔记13—Online Algorithm的更多相关文章
- 算法课堂笔记14—NP-COMPLETENESS
今天的算法课接着上一节,说的是NP问题. 1.关于什么是P和NP问题 所谓P问题是指所有能在多项式复杂度解决的问题,比如排序算法,n*n复杂度解决问题.而对于有些问题,目前可能没有多项式复杂度的解决方 ...
- 《linux就该这么学》课堂笔记13 网络会话、ssh、远程会话
1.常见的网卡绑定驱动有三种模式—mode0.mode1和mode6 mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术. ...
- 九章算法系列(#3 Binary Tree & Divide Conquer)-课堂笔记
前言 第一天的算法都还没有缓过来,直接就进入了第二天的算法学习.前一天一直在整理Binary Search的笔记,也没有提前预习一下,好在Binary Tree算是自己最熟的地方了吧(LeetCode ...
- 九章算法系列(#5 Linked List)-课堂笔记
前言 又是很长时间才回来发一篇博客,前一个月确实因为杂七杂八的事情影响了很多,现在还是到了大火燃眉毛的时候了,也应该开始继续整理一下算法的思路了.Linked List大家应该是特别熟悉不过的了,因为 ...
- 九章算法系列(#4 Dynamic Programming)-课堂笔记
前言 时隔这么久才发了这篇早在三周前就应该发出来的课堂笔记,由于懒癌犯了,加上各种原因,实在是应该反思.好多课堂上老师说的重要的东西可能细节上有一些急记不住了,但是幸好做了一些笔记,还能够让自己回想起 ...
- 九章算法系列(#2 Binary Search)-课堂笔记
前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一 ...
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
<Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...
- 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...
- ocp11g培训内部教材_052课堂笔记(042)_体系架构
OCP 052 课堂笔记 目录 第一部分: Oracle体系架构... 4 第一章:实例与数据库... 4 1.Oracle 网络架构及应用环境... 4 2.Oracle 体系结构... 4 3. ...
随机推荐
- 【转】SQLServerDBA十大必备工具---让生活轻松点
曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了: 诚然,SSMS和Profile足够强大,工作的大 ...
- 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...
- js作用域学习
代码解析至少分两步 1):查找var,function参数例如下面这个例子 a= 未定义 fn1={alert(2)}函数的话,是整个整体 2):逐行读代码:类似=+-%*等都是表达式,表达式可以改变 ...
- linux vagrant visual box 虚拟机比较慢
提现在跑本地虚拟机开发环境很慢,直接影响工作效率,网上搜了,亲测可用. cite: http://leo108.com/pid-2072.asp 在 vagrantfile中加入 config ...
- Java语言的编写规范
,区别大小写.2,注意编程格式,比如对齐啊 什么的.3,注释一定要写好,有统一的// 或者/* */,这样让程序好看.4,定义变量的时候竟让别人看明白,不要A 啊B 啊什么的 要用英语单词这类的,简而 ...
- 从表中删除重复记录的sql
--有一个表,假设是这样的 CREATE TABLE Test ( field1 ) primary key, field2 )); --假设field1上有索引. 要删除表中所有field1重复的记 ...
- WordPress 添加Meta Box的方法步骤
需要使用到add meta boxes Action,该Action允许我们为任何文章类型注册Meta Box,在该Action中,我们需要使用add_meta_box()方法来添加Meta Box的 ...
- windows+caffe(三)——求取图片的均值
这个要在图片已经转化成lmdb格式下才能求均值... 1.查看caffe根目录下的bin是否存在compute_image_mean.exe(用的happey大神的) 如果没有存在,你需要打开Main ...
- Python Locust性能测试框架实践
[本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...
- WPF里的报警闪烁效果
<esri:MarkerSymbol x:Key="FlashMarkerSymbol" OffsetX="41" OffsetY="41&qu ...