算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem
算法导论【在线算法】
- The Ski-Rental Problem
- 问题描述
- 在线算法
- 证明
- The Lost Cow Problem
- 问题描述
- 在线算法
- 类似问题—寻宝藏
- The Secretary Problem
- 问题描述
- 在线算法
- The Best Possible k
The Ski-Rental Problem
问题描述
- 假设你正在上滑雪课。每节课结束后,你决定(取决于你喜欢的程度、你的骨骼状况和天气)是继续滑雪还是完全停止滑雪。
- 你可以选择以1美元一次的价格租用滑雪板,也可以以B美元的价格购买滑雪板。
- 你是买还是租?
- 如果你事先知道你一生中会滑雪多少次,那么选择租还是买就很简单了。
- 如果你要滑雪超过BBB次,那就在开始前购买,否则就一直租。该算法的代价为min(T,B)min(T,B)min(T,B)。
- 这种对未来了如指掌的策略被称为离线策略。
在线算法
- 实际上,你不知道你会滑雪多少次。你该怎么办?
- 在线策略是:取一个数字k,这样在租用k−1次后,您将购买滑雪板(就在第k次滑雪之前)。
- 如果我们取k=Bk=Bk=B,那么可以保证我们支付不会超过离线策略成本两倍的费用
- 例如:假设B=7美元,那么,在6次租金之后,你就买了。总付款:6+7=13$
证明
最坏情况下,k=Bk=Bk=B,我们选择在滑雪次数T=k−1T=k-1T=k−1次后再也不滑雪,那么在线算法的总费用为B−1+B=2B−1B-1+B=2B-1B−1+B=2B−1,而离线算法取得的最优解为min(T,B)=Bmin(T,B)=Bmin(T,B)=B,此时竞争比为2B−1B=2−1B\cfrac{2B-1}{B}=2-\cfrac{1}{B}B2B−1=2−B1,则我们说这个策略是(2−1B)(2-\cfrac{1}{B})(2−B1)竞争的

The Lost Cow Problem
问题描述
- Old McDonald失去了他最喜欢的奶牛。最后一次看到它朝着通向两条无限道路的路口行进。没有一位目击者能说出奶牛是选择了左边还是右边的路线。

在线算法
- 在线算法是9-competitive的,换句话说:在找到奶牛之前可能经过的距离最多是最佳离线算法(知道奶牛在哪里)距离的9倍
- 最坏的情况是,他发现奶牛的距离比他上次在这一侧搜索的距离稍远
- 因此,OPT=2j+εOPT=2j+εOPT=2j+ε,其中j=j=j=迭代次数,εεε是某个小距离。然后

- 伪代码如下:

类似问题—寻宝藏


mmm条路编号为1,2,3...m1,2,3...m1,2,3...m,从第一条路开始寻找,初始寻找距离为d=1d=1d=1,如果在这个距离内找到了宝藏则结束寻找,没找到则寻找距离翻倍,切换至寻找下一条路径,路径编号对mmm取模,保证每次寻找的路径都是合法的,直到找到宝藏。
Treasure(m)
d = 1;current side = 1
while true doWalk distance d on current sideif find treasure thenexitelsed = 2dcurrent side = (current side+1)%mreturn to starting point
该算法的竞争比为O(m)O(m)O(m)
证明:
最坏的情况是,发现宝藏的距离比上次在这条路上搜索的距离稍远一点点,因此,最优解为OPT:2j+εOPT:2^j +εOPT:2j+ε,其中jjj=迭代次数,εεε是某个小距离。则:
CostOPT=2j+ε>2jCostON=m(1+2+4+...+2j+1)+2j+ε=m⋅2j+2+2j+ε=(4m+1)⋅2j+ε<(4m+1)⋅CostOPT\begin{aligned} Cost OPT &= 2^j +ε>2^j\\ \ \ \ \ \ \ Cost ON&= m(1+2+4+...+2^{j+1})+2^j +ε\\ &= m · 2^{j+2} +2^j +ε = (4m+1)· 2^j +ε < (4m+1) · Cost OPT \end{aligned} CostOPT CostON=2j+ε>2j=m(1+2+4+...+2j+1)+2j+ε=m⋅2j+2+2j+ε=(4m+1)⋅2j+ε<(4m+1)⋅CostOPT
所以竞争比为O(4m+1)=O(m)O(4m+1)=O(m)O(4m+1)=O(m)
The Secretary Problem
问题描述
- 我们有
n位候选人(可能是求职者或可能的婚姻伴侣)。 - 我们的目标是选择最好的候选人。
- 假设候选人可以从最好到最坏完全排序,没有任何联系。
- 候选人以随机顺序依次到达。
- 我们只能在候选人到达时确定他们的相对排名。
- 我们不能观察绝对等级。
- 每次面试后,我们必须立即接受或拒绝申请人。
- 候选人一旦被拒绝,就不能被召回。
- 一旦候选人被录取,我们就停止面试。
在线算法
- 已知候选人数
n - 在线策略在遇到第
i位候选人后,我们能够给出分数score(i)。 - 选择一个正整数
k<n,面试并拒绝前k位候选人。 - 继续面试剩下的
n-k位,并接受第一位得分高于前k位候选人的候选人。 - 如果最高分在第一批面试的
k人里,那么我们必须接受第n位即最后一位申请人 - 伪代码:

The Best Possible k
结论:如果我们在k=nek=\cfrac{n}{e}k=en的情况下实施我们的策略,我们将以至少1e\cfrac{1}{e}e1的概率成功雇佣我们最合格的申请人
相关文章:
算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem
算法导论【在线算法】The Ski-Rental Problem问题描述在线算法证明The Lost Cow Problem问题描述在线算法类似问题—寻宝藏The Secretary Problem问题描述在线算法The Best Possible kThe Ski-Rental Problem 问题描述 假设你正在上滑雪课。每节课结束后,你决定&a…...
linux 下怎样给pdf 文件加书签
linux 下怎样给pdf 文件加书签 对于没有书签的pdf文件,怎样给pdf加标签呢? 以方便阅读. 以前总是要借助windows下pdf 工具, 叫什么来者? 忘了 记得是编辑一个用tab表示目录级别的文本文件, 有一种直观的感觉,大目录下嵌套着小目录 ..., 然后导入到文件中 linux 下有没有这种…...
[软件工程导论(第六版)]第2章 可行性研究(课后习题详解)
文章目录1. 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?2. 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名…...
[软件工程导论(第六版)]第3章 需求分析(课后习题详解)
文章目录1. 为什么要进行需求分析?通常对软件系统有哪些需求?2. 怎样与用户有效地沟通以获取用户的真实需求?3. 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录…...
基于分布鲁棒联合机会约束的能源和储备调度(Matlab代码实现)
👨🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…...
ETL和数据建模
一、什么是ETL ETL是数据抽取(Extract)、转换(Transform)、加载(Load )的简写,它是将OLTP系统中的数据经过抽取,并将不同数据源的数据进行转换、整合,得出一致性的数据&…...
ccc-pytorch-回归问题(1)
文章目录1.简单回归实战:2.手写数据识别1.简单回归实战: 用 线性回归拟合二维平面中的100个点 公式:ywxbywxbywxb 损失函数:∑(yreally−y)2\sum(y_{really}-y)^2∑(yreally−y)2 迭代方法:梯度下降法,…...
【JAVA八股文】框架相关
框架相关1. Spring refresh 流程2. Spring bean 生命周期3. Spring bean 循环依赖解决 set 循环依赖的原理4. Spring 事务失效5. Spring MVC 执行流程6. Spring 注解7. SpringBoot 自动配置原理8. Spring 中的设计模式1. Spring refresh 流程 Spring refresh 概述 refresh 是…...
二叉树的相关列题!!
对于二叉树,很难,很难!笔者也是感觉很难!虽然能听懂课程,但是,对于大部分的练习题并不能做出来!所以感觉很尴尬!!因此,笔者经过先前的那篇博客,已…...
Java设计模式 - 原型模式
简介 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直…...
深度学习中的 “Hello World“
Here’s an interesting fact—Each month, there are 186.000 Google searches for the keyword “deep learning.” 大家好✨,这里是bio🦖。每月有超18万的人使用谷歌搜索深度学习这一关键词,是什么让人们对深度学习如此感兴趣?接下来请跟随我来揭开深度学习的神秘面纱。…...
购买WMS系统前,有搞清楚与ERP仓库模块的区别吗
经常有朋友在后台询问我们关于WMS系统的问题,他们自己也有ERP系统,但是总觉得好像还差了点什么,不知道是什么。今天,我想通过本文,来向您简要地阐述ERP与WMS系统在仓储管理上的不同之处。 ERP仓库是以财务为导向的&…...
一文吃透 Spring 中的IOC和DI
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
分布式任务处理:XXL-JOB分布式任务调度框架
文章目录1.业务场景与任务调度2.任务调度的基本实现2.1 多线程方式实现2.2 Timer方式实现2.3 ScheduledExecutor方式实现2.4 第三方Quartz方式实现3.分布式任务调度4.XXL-JOB介绍5.搭建XXL-JOB —— 调度中心5.1 下载与查看XXL-JOB5.2 创建数据库表5.3 修改默认的配置信息5.4 启…...
【源码解析】Ribbon和Feign实现不同服务不同的配置
Ribbon服务实现不同服务,不同配置是通过RibbonClient和RibbonClients两个注解来实现的。RibbonClient注册的某个Client配置类。RibbonClients注册的全局默认配置类。 Feign实现不同服务,不同配置,是根据FeignClient来获取自定义的配置。 示…...
【webpack5】一些常见优化配置及原理介绍(二)
这里写目录标题介绍sourcemap定位报错热模块替换(或热替换,HMR)oneOf精准解析指定或排除编译开启缓存多进程打包移除未引用代码配置babel,减小代码体积代码分割(Code Split)介绍预获取/预加载(prefetch/pre…...
力扣sql简单篇练习(十九)
力扣sql简单篇练习(十九) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 用count是不会统计为null的数据的 SELECT query_name,ROUND(AVG(rating/position),2) quality,ROUND(count(IF(rating<3,rating,null))/count(r…...
线段树c++
前言 在谈论到种种算法知识与数据结构的时候,线段树无疑总是与“简单”和“平常”联系起来的。而这些特征意味着,线段树作为一种常用的数据结构,有常用性,基础性和易用性等诸多特点。因此,今天我来讲一讲关于线段树的话题。 定义 首先,线段树是一棵“树”,而且是一棵…...
HTML+CSS+JavaScript学习笔记~ 从入门到精通!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、HTML1. 什么是HTML?一个完整的页面:<!DOCTYPE> 声明中文编码2.HTML基础①标签头部元素标题段落注释水平线文本格式化②属性3.H…...
LeetCode 430. 扁平化多级双向链表
原题链接 难度:middle\color{orange}{middle}middle 题目描述 你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指针可能指向一个单独的双向链表,也包含这些特殊的节点。这些子列表可以有一…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
