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