K-server问题
来源:互联网 发布:蚌埠学校网络教务系统 编辑:程序博客网 时间:2024/06/04 19:26
引例和问题
考虑这样一个情境:如果你是一个军队的指挥官,要调运军力去往战场上不同的据点。战场局势瞬息万变,每隔一段时间,就会有新的据点需要占据。如何指挥军力去完成任务,使得军队移动的总距离尽可能小?
上面的例子所提出的问题,可以抽象为如下的模型:现有k个服务者(server),一系列请求(request)会陆续到达。每当有一个请求到达,就要决定调动哪个服务者去服务该请求。服务者和请求可以视为度量空间中的点。最终的目标是使得对所有服务者调动的代价(比如移动的距离之和)尽可能小。
有很多实际应用场景可以规约到这个模型。比如,物资的运输、警力的紧急调度、服务器的资源管理,等等。
数学描述:
设
其他补充:
- 度量空间可能是无限或有限的(分别对应于连续和离散的情况)
- (h,k)-server problem: 在线k-server算法比较的对象是离线h-server算法,
h≤k
基本概念
离线最优算法
首先,k-server问题是在线问题,因为请求序列是随着时间的推进依次出现的,每当有一个请求出现,就须要决策哪个服务者去服务它。
离线的场景,没有时间的概念,整个请求序列
一个简单的贪婪策略
考察下面的贪婪策略:每当有一个请求出现时,用与它最近的服务者去服务它。
很容易举出一个例子来说明这个贪婪策略会很差。设有两个服务者,请求出现的位置有3个,用
k-server猜想
- k-server猜想:对于任何度量空间,k-server问题都存在k-竞争的在线算法。
- 无法推广到到非对称度量空间
- 对任何度量空间,已知最好的竞争比是
2k−1 (work function算法)
确定算法的一个竞争比下界
- 对于至少有
k+1 个点的度量空间(请求出现的位置是离散且有限的),任何确定性k-server算法的竞争比不可能小于k - 更强的结论:对于至少有
k+1 个点的度量空间,任何(h,k)-server问题的算法竞争比不可能小于kk−h+1
简单环境下的k-server问题
坏消息:对于大多数几何结构,例如欧式平面,还没有任何k-竞争确定算法被发现。
好消息:对于欧式线,存在k-竞争算法,并且可以推广到树上。
线(Line)
双覆盖算法(Double-Coverage, DC) 如果请求落在所有服务者构成的凸包的外面,用与它最近的服务者去服务它;否则,请求一定落在两个相邻的服务者之间,用相等的速度将这两个服务者同时移向请求,直到其中一个到达它(如果两个服务者同时占据一个请求,就任选一个)。
DC算法是k-竞争的。
证明:
- 势函数方法(potential function method) (关于势函数方法应用于竞争比的分析,将在下次组会用一个经典模型来讲解)
势函数:
其中,
显然,
证(i). 显然成立。只有OPT移动时,
证(ii). 由于DC有两种移动方式,因此分别针对这两种情况讨论。
情况一:DC只移动一个服务者。此时DC移动的一定是所有服务者构成的凸包的极点处的服务者,那么该服务者一定是远离其他
情况二:DC同时移动了两个服务者(设为
树(Tree)
- 不考虑树枝的权重
- 定义“邻居”:对一个服务者
si ,如果它到请求的最短路径上没有其他服务者,则称si 是该请求的一个邻居。
树覆盖算法(DC-Tree) 每当有请求出现时,将该请求的所有邻居以相同的速度移向请求。
树覆盖算法是k-竞争的。
其他算法
推广到高维空间?
- 高效 = 计算复杂度不随着输入规模的增大而指数增加
- 坏消息:即便对于二维欧式空间,尚未发现高效的k-server算法
- 好消息:对于任意欧式空间的2-server问题,存在3-竞争的算法
设
对任意欧式空间,SC
1/2 是3-竞争的。
利用均衡原则的启发式算法
对任意有
平衡算法(Balance) 对每个服务者
平衡算法是k-竞争的。
注意上面的算法都隐含如下的假设:当新的请求出现时,k个服务者都处于闲置状态。其实这个假设是不现实的,但是有了它可以便于分析。
功函数方法(Work Function Method)
符号说明
C : 组态(configuration),表示服务者集合的(瞬时)位置状态。是一个多重集合,即集合中允许存在多个位于同一位置的服务者。C 中的一个元素用小写字母表示- 两个组态
X,Y 的距离用D(X,Y) 表示,等于X 和Y 之间的最小权匹配 - 按时间先后到达的请求序列
σ={r1,r2,…,rn}
功函数
用
递推关系:
当
其中,
另外,
在线k-server功函数算法
功函数算法(WFA) 设
可见,WFA背后的思想,其实就是动态规划。当然,对于在线的情况,由于无法预知未来信息,这种算法是一种近似的动态规划。
关于WFA的竞争性,有如下结论:
对任意度量空间,WFA是
(2k−1) -竞争的。
证明的方法比较复杂,这里就不展开了。
现实中k-server问题的简单实例
进程调度
- 先来先服务(FCFS)
- 短作业优先(SJF)
- 优先级调度
- 按新的更高优先级的进程能否抢占正在执行的进程分类:非抢占式优先级调度、抢占式优先级调度
- 按进程创建后其优先级是否可以改变:静态优先级、动态优先级
- 高响应比优先:是对SJF算法的一种改进,改进点在于作业的优先级随着等待时间的增加而增加,有利于克服“饥饿”现象。作业的优先权由下式定义:
Rp=等待时间+要求服务时间要求服务时间 ,Rp 又称作响应比。 - 时间片轮转:主要适用于分时系统。时间片的长短通常由以下因素决定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。
- 多级反馈队列:集合了前几种算法的优点
磁盘调度
- FCFS
- 最短寻找时间优先(Shortest Seek Time First, SSTF)
- 扫描(SCAN, 又称电梯算法)
- 循环扫描(Circular SCAN):扫描算法的一种变形
- K-server问题
- K条最短路径问题
- K条最短路径问题
- 最大K乘积问题:
- TOP K问题
- 【第K排列问题】
- K条最短路径问题
- TOP K问题
- 第K大数问题
- Top K问题
- top K 问题
- 最大k乘积问题
- Top K问题
- k sum 问题系列
- TOP K问题
- K - 迷宫问题
- K-mer Index问题
- K SUM问题
- 使用 QJM 实现 HDFS 的 HA
- 修改sap的用户时间/时区与系统时间/时区
- 位移&二进制转换&原码&反码&补码
- Math类的常量与方法
- HDU 4685 Prince and Princess(求所有二分图最大匹配)
- K-server问题
- 使用webpack合并js文件
- 【Linux学习】linux下 各种解压文件使用方法
- 标准库之栈和队列的使用
- 【python】比较两个json并返回差别
- 【机器学习】主成分分析PCA
- C++关键字---friend
- nodejs入门(00)
- Oracle与sql