Gossip协议的一些胡乱推导运算分析

简介

Gossip协议又称传染病协议,因为gossip(流言)以类似于病毒的方式在计算机之间传播信息。

Gossip协议满足的条件

1,协议的核心包括周期性,成对性,内部进程交互
2,交互期间的信息量大小固定
3,节点交互后,至少一个agent获知另一个agent的状态
4,通信不可靠
5,交流的频率远远低于消息的传输延迟
6,对端选择的随机性,或者从全集,或者从部分集合
7,由于副本的存在,传输的信息具有隐式冗余

Gossip协议举例

假设我们在一个网络中寻找一个pattern的最优匹配,机器上运行着agent 程序,这些agents实现了gossip协议
1,用户首先要求local agent传播pattern
2,每一个agent定期并以一定的速率(0.1秒一次)随机选择一个其他的节点传播此pattern。例如节点A和B,如果A知道了pattern,那么B也会知道,随后A和B随机选择了C和D继续传播此消息。因此即使发生节点故障或者消息丢失,此消息依然会在全网范围内传播。
3,如果agent第一次收到此pattern,则开启本地查询,寻找本地的最优匹配
4,agents也传播其最优匹配。因此,如果A和B进行交互后,A和B都会知道最优匹配。最优匹配也会通过全网范围进行传播。
Log时间的复杂度,例如25000个节点,那么30轮就会结束,15轮进行pattern的传播,15轮询问最优匹配。

有偏Gossip协议

不是从全部节点中随机选择一个,考虑到网络延迟,从相邻的节点中随机选择,更高效。

为何是log时间

变量定义

初始 1 个人,全部 n 个人,一个人每次感染 b 个人,则感染率为 p=b/(n1)
令第 i 轮有 xi 个人被感染, nxi 未感染
则第 i+1 被感染的新的人数为 xip(nxi)
xi+1=xi+xip(nxi) ,且 x1=1
证明
xi 个人中每一个人能够感染的新人为: b(nxi)/(n1)
则一共 xi 个人贡献的感染人数为: xib(nxi)/(n1)=xip(nxi)

推导 xt

一种方案是解通项公式,对 xi+1 进行转换

xi+1=Ax2i+Bxi+C=A(xiB/2A)2+CB2/(4A)A=pn,B=pn+1,C=0

xi=ai+B/(2A) 代入到上式中,则
ai+1=Pa2i+Q P=A,Q=(4ACB2+2B)

于是现在的问题转换为如何解出 ai+1 ,然而我并没有想到很好的解法,不知道能否通过展开求级数?

另一种方案是采用微分方程的方式,然而并不完全可靠
一些简单的分析:
分析1: 由 xi+1=xi+1 ,可推导出 xi+1xi=1 ,即 dydt=1 ,从而可以解出 y=t ,即 xt=t
分析2: 由 xi+1=2xi ,可推导出 xi+1xi=xi
dydt=y ,从而可以解出 lny=t ,即 xt=et ,然而实际上我们可以手动计算此通项,即 xt=2t ,这两个是不一样的,然而我们可以看出它们的指数是一样的 t ,仅仅是底数不同而已,同理,可使用其他类似的式子进行测试,它的总体指数趋势是不变的,变的仅仅是底数而已,于是我想当然的利用这一特性(个人感觉应该可行)!

xi+1=xi+xip(nxi) ,得 xi+1xi=xip(nxi) ,故而 dydt=yp(ny)
对上次进行积分过程如下:

dydt=yp(ny)dyy(ny)=pdtdyy+dyny=pndtlnylnny=pntlnyny=pnt

n 非常大的时候,可令 y=n1 ,且 pnb,nn1 ,则
lnn=bt ,即 t=lnnb ,故而得出经过 lnnb 轮,有 n1 个人被感染,也可认为全部被感染。
考虑到上面在转化为积分过程中,会有底数的不一致性,因此也就是时间复杂度为 clogn 级别。

猜你喜欢

转载自blog.csdn.net/lipeng08/article/details/54578221