算法课堂笔记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. ...
随机推荐
- 20145320 《Java程序设计》第2周学习总结
20145320 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 基本类型 整数(short.int.long) .字节(byte) .浮点数(float ...
- servletFileUpload
引用:http://bbs.csdn.net/topics/390290685?page=1 Java code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- iOS开发中NSLog输出格式大全
本文的内容是总结了一下iOS开发中NSLog输出格式大全,虽然比较基础,但有总结毕竟会各位正在学习iOS开发的朋友们一些小小的帮助. %@ 对象 %d, %i ...
- 替换所有字符串,获取url参数值
替换所有的字符串: var newStr = str.replace(/null/g, ""); 获取url参数值 <script type="text/javas ...
- Windows便笺 快捷键
便笺快捷键 便笺快捷键多数与Office相同 Ctrl+N 新建 Alt+F4 关闭便笺,下次打开内容还在 Ctrl+D 删除 Ctrl+E 居中 Ctrl+R 右对齐 Ctrl+L 左对齐 Ctrl ...
- 设置Ubuntu 14.04右键终端的方法
设置Ubuntu 14.04右键终端的方法如下: 首先要安装一个包,即可在右键里面添加一个"打开终端"的菜单. sudo apt-get install nautilus-open ...
- Underscore.js 初探
一. 简介 Underscore 这个单词的意思是“下划线”. Underscore.js 是一个 JavaScript 工具库,提供了一整套的辅助方法供你使用. Think that - ...
- ucenter的单点登录
所谓单点登录,无非就是几个站点共用一个用户中心,实现同步登陆,同步退出. 服务器端:Loog SSO . 客服端: ucenter,说实话dz商业化确实让php发展了不少. ucenter 基本原理: ...
- ArcgisAdd-In开发入门实例
1.开发环境 Vs2012+Arcgis10.2+win7 64bit 2.实现代码 首先在VS2012中新建一个解决方案,命名AddInTest. 接着,给解决方案AddInTest新建一个项目: ...
- src url href uri的区别和联系