zoukankan      html  css  js  c++  java
  • Zookeeper(一)从抽屉算法到Quorum (NRW)算法

    一、抽屉算法

      抽屉算法,又名鸽巢原理,它是德国数学家狄利克雷首先明确的提出来并用以证明一些数论中的问题,因此,也称为狄利克雷原则。它是组合数学中一个重要的原理。

    具体算法讲的是:

     第一抽屉算法: 如果n+1个物体被放进n个盒子,那么至少有一个盒子包含两个或更多的物体。  

        证明(反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是n,而不是题设的n+k(k≥1),故不可能。

    第二抽屉算法:把多于mn(m乘以n)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于m+1的物体。

        证明(反证法):若每个抽屉至多放进m个物体,那么n个抽屉至多放进mn个物体,与题设不符,故不可能。

    第三无穷项集抽屉算法:把无穷多件物体放入n个抽屉,则至少有一个抽屉里有无穷个物体。

    原理1 、2 、3都是第一抽屉原理的表述。算法3,对于无穷项集而言,学过实变函数的很明了,单独说成一个算法这没有意义。

       二、Quorom算法

       Quorom算法是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理。

    在有冗余数据的分布式存储系统当中,冗余数据对象会在不同的机器之间存放多份拷贝。但是同一时刻一个数据对象的多份拷贝只能用于读或者用于写。

    该算法可以保证同一份数据对象的多份拷贝不会被超过两个访问对象读写。

       算法来源于[Gifford, 1979]。 分布式系统中的每一份数据拷贝对象都被赋予一票。每一个操作必须要获得最小的读票数(Vr)或者最小的写票数(Vw)才能读或者写。如果一个系统有V票(意味着一个数据对象有V份冗余拷贝),那么这最小读写票必须满足:

    1. Vr + Vw > V
    2. Vw > V/2

      第一条规则保证了一个数据不会被同时读写。当一个写操作请求过来的时候,它必须要获得Vw个冗余拷贝的许可。而剩下的数量是V-Vw 不够Vr,因此不能再有读请求过来了。同理,当读请求已经获得了Vr个冗余拷贝的许可时,写请求就无法获得许可了。

      第二条规则保证了数据的串行化修改。一份数据的冗余拷贝不可能同时被两个写请求修改。

    三、算法的好处

      在分布式系统中,冗余数据是保证可靠性的手段,因此冗余数据的一致性维护就非常重要。一般而言,一个写操作必须要对所有的冗余数据都更新完成了,才能称为成功结束。比如一份数据在5台设备上有冗余,因为不知道读数据会落在哪一台设备上,那么一次写操作,必须5台设备都更新完成,写操作才能返回。

       对于写操作比较频繁的系统,这个操作的瓶颈非常大。Quorum算法可以让写操作只要写完3台就返回。剩下的由系统内部缓慢同步完成。而读操作,则需要也至少读3台,才能保证至少可以读到一个最新的数据。

      Quorum的读写最小票数可以用来做为系统在读、写性能方面的一个可调节参数。写票数Vw越大,则读票数Vr越小,这时候系统写的开销就大。反之则写的开销就小。

    四、几套例题

    1:同年出生的400人中至少有2个人的生日相同。

    2 幼儿园买来了不少白兔、熊猫、长颈鹿塑料玩具,每个小朋友任意选择两件,那么不管怎样挑选,在任意七个小朋友中总有两个彼此选的玩具都相同,试说明道理.

    例3:从246、…、3015个偶数中,任取9个数,证明其中一定有两个数之和是34

    例4:从1234、…、192020个自然数中,至少任选几个数,就可以保证其中一定包括两个数,它们的差是12

    例5: 从12020个数中,任取11个数,必有两个数,其中一个数是另一个数的倍数。

    例6:某校校庆,来了n位校友,彼此认识的握手问候.请你证明无论什么情况,在这n个校友中至少有两人握手的次数一样多。

    例7:15个网球分成数量不同的4堆,数量最多的一堆至少有多少个球?

    例8 证明:任取8个自然数,必有两个数的差是7的倍数。

    例9:对于任意的五个自然数,证明其中必有3个数的和能被3整除.

    例9′:对于任意的11个整数,证明其中一定有6个数,它们的和能被6整除.

    例10: 任意给定7个不同的自然数,求证其中必有两个整数,其和或差是10的倍数.

    例11:九条直线中的每一条直线都将正方形分成面积比为2:3的梯形,证明:这九条直线中至少有三条经过同一点.

    例12:饲养员给10只猴子分苹果,其中至少要有一只猴子得到7个苹果,饲养员至少要拿来多少个苹果?

    例13:从13自然数中,一定可以找到两个数,它们的差是12的倍数。

    例14:一个班有40名同学,现在有课外书125本。把这些书分给同学,是否有人会得到4本或4本以上课外书?

    例15:42只鸽子飞进5个笼子里,可以保证在鸽子最多的笼子中至少有几只鸽子?

    大家思考一下,看咋个解答。

      为了突出版权,每个算法后面,填首原创词。嘿嘿!

              钗头凤·乡愁
    家乡远,岁月多,满脸泪痕情难落,
    儿时笑,今非昨,一杯乡愁,十年离索
    躲! 躲! 躲!
    鬓已白,人已瘦,浮名难系心如旧
    西风寒,夜阑珊,独依房门,泪眼装欢,
    难! 难! 难! 

  • 相关阅读:
    uva111 History Grading
    UVA 10100Longest Match
    UVA 147Dollars
    归并排序模板
    找礼物(find)
    水流(water)dfs
    细菌(disease) 位运算
    单词接龙
    关于jquery的each遍历,return只终止当前循环,不好使的解决办法
    jquery中ajax回调函数使用this
  • 原文地址:https://www.cnblogs.com/bigdatafly/p/5479743.html
Copyright © 2011-2022 走看看