1dht优点:一个人的工作量太大了,按一定的方法把他的工.docVIP

1dht优点:一个人的工作量太大了,按一定的方法把他的工.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.dht 优点: 一个人的工作量太大了,按一定的方法把他的工作分配很多人一起做。 分配方法:就是dht的几种算法。 2.hash 表:查找速度更快! Hash表的构造:除余法:例如H(k)=k mod 10 会有冲突: 解决冲突的方法: 1.链地址法: 2.开放地址法:Hi(k)=(H(k)+di)mod m (1)di=1,2,3,…(线性探测再散列) (2) di=1^2,(-1)^2,2^2,(-2)^2…(二次探测再散列) (3) di=伪随机序列(伪随机再散列) 例:keys为(32,13,49,55,22,38,21),m为7 线型探测在散列: 32 MOD 7 = 4 存入地址空间4; 13 MOD 7 =6 存入地址空间6; 49 MOD 7 = 0 存入地址空间0; 55 MOD 7 = 6 发生冲突,处理冲突如下: 下一个存储地址为(6+1) MOD 7 = 0 仍然冲突 在下一个存储地址为(6+2) MOD 7 = 1 不冲突,存入地址空间1; 22 MOD 7 = 1 发生冲突,处理冲突如下: 下一个存储地址为(1+1)MOD 7 = 2 不冲突,存入地址空间2; 38 MOD 7 =3 存入地址空间 3; 21 MOD 7 = 0 冲突, (0+1)MOD 7 = 1,冲突 (0+2)MOD 7 =2 冲突 (0+3)MOD 7 =3 冲突 (0+4)MOD 7 =4 冲突 (0+5)MOD 7 =5 不冲突,存入地址空间5 已经建立HASH表,用关键字K来查询K的数据元素: 根据K值求它的哈希地址,即H(k),然后根据H(k)找出哈希地址如果为空,则查找失败,若不为空,将K与该单元的关键字相比较,若两者相等,则查找成功,若不相等,则按照构造hash表的方法,继续在“下一个存储地址”中查找。 3.dht的一般算法:环内按着succesor来查找。缺点:跳数太多(N/2,其中N为在环内 节点的数量)如果节点失败,就不能往下走。 Key的加入: 找到Key(看作ID)的Successor算法(就是找到负责Key的节点): def findNode(start, key): current=start while distance(current.id, key) \ distance(current.next.id, key): current=current.next % while完成的功能是:current与key的差值最小。 return current def distance(a, b): if a==b: return 0 elif ab: return b-a; else: return (2**k)+(b-a);% a和b的差值。 4.chord:把跳数减低(log2N) succesor:D与本节点ID最接近、且大于本节点ID的节点。 (1)Key的加入: 即怎么根据环中的任意一个节点stard开始来找负责key的节点:(例如:从节点1找负责key7的节点) def lookup(start, key): current=findFinger(start, key)%current为节点6 next=findFinger(current, key)%next为节点0 while distance(current.id, key) distance(next.id, key): current=next next=findFinger(current, key)%如此反复,直到找到负责key7的节点为节点0 return current 在节点node的finger表中查找与key值最接近的节点 def findFinger(node, key): current=node for x in range(k):%从finger表中finger[1]到finger[k]查找。 If distance(current.id, key) distance(node.finger[x].id, key): current=node.finger[x]%如果找到与key值最接近的id的节点(即key的succesor) return current (2)节点加入和退出:(值得注意的是节点的加入和退出与key的加入和退出是独立的) 加入算法: 节点X利用任意一个节点A加入环中: 1.X得到一个随机分配的I

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档