竞争分析 自组织表(初步学习)

2018-10-23  本文已影响133人  LiBiscuit

今天看了MIT算法导论公开课之第14课 竞争性分析、自组织表 所以就对所学到的知识作一下总结!  


自组织表

定义:含有n个元素的链表L

用户操作

a.访问其中的元素Access(x)

b.查找元素的位置Rank(x)(从表头到x的距离)。

c.置换相邻的元素reorded()

算法操作:

链表L可以通过交换相邻元素调整元素顺序,且置换代价为1。

(如果考虑用户的访问可能是一系列的,而且一个元素被访问后,再次被访问的概率会增大,因此考虑对一个元素访问后将该元素和其前驱的元素交换(代价为O(1)),从而减少其下次访问的代价。)

举个栗子:

在线算法与离线算法

1.在线算法

必须立即完成这步操作,而不管之后的操作是什么(即不能预知后续操作)

2.离线算法

离线算法可以假设可以预读整个序列,从而可以对整个操作序列做优化。

对比一下:可以看出两者的区别在于是不是知道后续的操作.

可以举个栗子说明一下:

我们经常玩的游戏俄罗斯方块,在玩的时候我们不能预知下一个出现的方块是什么,所以必须先完成当前的这个方块的操作。而离线方法,相当于你知道了后续所有方块,你就可以根据后续的方块来进行游戏操作了。

画个重点:不论是在线算法还是离线算法,其目标都是使得对整个操作序列的总的访问代价最小。



复杂度分析

思想:MTF (前移思想)

竞争分析


公式解析:即算法A对S的操作代价不大于其最优的离线算法乘上a,再加k(K为常数)。

Copt(S),即是如果知道所有操作序列,可以做到的最好的代价。

对a的限定不依赖于任何输入,也不依赖于任何概率假设。


自组织表的MTF(Move-to-front)算法为四竞争的证明


今天是霜降啦~所以也要是元气满满 活力的一天啦~

来自不想学习 想食补的小李啦!

finally

鸣谢一下参考:MIT算法导论公开课之第14课 竞争性分析、自组织表 - rye_whiskey的博客 - CSDN博客

https://blog.csdn.net/yalishadaa/article/details/54945362

上一篇 下一篇

猜你喜欢

热点阅读