我們總會面臨這樣的問題,需要給一組用戶分配一些稀缺資源,站在資源分配者的角度,他們具有等價的權利獲取資源,但實際上,一些用戶可能獲取較少的資源就能夠滿足需要,這樣看來,他們對資源的獲取又不是完全等價的,似乎不適合去平分資源,因此就有了最大最小公平算法。
最大最小公平算法定義如下(不帶權):
1、資源按照需求遞增的順序進行分配;
2、不存在用戶獲得的資源超過自身的需求;;
3、對於未滿足的用戶,等價分享剩餘資源;
算法實現邏輯(不帶權):
首先假定用戶集合有n個用戶,1到n,他們對資源的需求已經排序完畢,滿足s1<s2< .... <sn,資源總量爲S。
1、將資源S/n分配給需求最小的1用戶,這很可能已經超出了用戶1的需求;
2、將超出的部分回收,再次將(S-s1)/(n-1)的資源分配給用戶2,依次次重複上述過程,直到某一次分給該用戶的資源不滿足該用戶的需求;
3、假定當分配到第k個用戶時,分配到的資源不能達到該用戶的需求,那麼就將剩下的資源,平均分配給未獲得資源的所有用戶,至此,分配任務結束。
【還有一種說法,是先將資源整體平分,再從小到大,將超出的資源平分給資源沒有得到滿足的用戶,這兩中做法的結果是一致的】
舉個栗子:
有用戶組G,該組中有4個用戶,資源需求分別爲2.4,3.6,4,5,資源總量爲10。避免長篇大論,這裏直接以圖的形式給出。
上面提到的是最基本的分配原則,但實際上往往並不是這麼簡單,每個用戶往往具有不同的權重,因此就有了分配原則的擴展,帶權重的最大最小分配原則。
最大最小公平算法定義如下(帶權):
1、通過權重實現分配的標準化;
2、不存在用戶得到的資源超過自己的需求;
3、未得到滿足的用戶,按照權重共享資源;
這裏直接舉例說明:
有用戶組G,該組中有4個用戶,資源需求分別爲2,4,4,10,權重分別爲4,2.5,1,0.5資源總量爲16。
1、首先對權重進行標準化,將最小權重設置爲1,則權重變爲8,5,2,1,總和爲16。將總資源分爲16等分,四個用戶分別得到8,5,2,1。
2、用戶1多獲得了6份資源,用戶2多獲得了1份資源,用戶3、4資源不滿足,因此,將多出來的7份資源再按照權重分配給用戶3、4,用戶3,4分別再獲得7*(2/3)、7*(1/3)份資源;
3、目前爲止,用戶3獲得6.666份資源,用戶4獲得3.333,將用戶3多出的資源再分配給用戶4,完成分配。
具體過程如下圖所示:
--------muhuizz整理