用處1:小組有n個耗時不等的任務,小組有m個能力不等的人,將任務進行合理的平均分配。
用處2:資料庫表的關係表需要分表,如漫畫的鏈結表每個漫畫的數量不同,按伺服器的效能進行分配資料。
分數值:33,47,22,6,38,56
序號及權重:a:1 b:2 c:3
1.每人輪流按順序拿
a: 33,6
b:47,38
c:22,56
2.將任務耗時降序排序按abc順序輪詢拿
分數值:56,47,38,33,22,6
序號及權重:a:1 b:2 c:3
a: 56,33
b: 47,22
c: 38,6
3.在2的基礎上abc每輪詢一次後按拿的分數公升序,分數低的先拿(貪婪分配?這時候權重算是1:1了)
分數值:56,47,38,33,22,6
序號及權重:a:1 b:2 c:3
a: 56,6
b: 47,22
c: 38,33
(開始平均了)
4.在3的基礎上為abc加入權重,但是輪詢一次後已拿的分數除以權重(權重分數)再進行公升序
因為資料量不大,跟3的結果一樣,但是用**隨機生成測試,分配不是很合理
5.將權重看作次數,分數按順序分配,按權重分數公升序拿,每拿一次權重減1,某個單位權重為0時分數不分配給該單位。全部單位權重都為0時恢復權重值重新輪詢一次,就是下面**的邏輯,分配還算平均
public class services
/// /// 權重計算
///
public int weightcalc
/// /// 權重分數
///
public decimal weightscore
/// /// 序號
///
public int id
/// /// 做個記錄
///
public listscoperecord = new list();
}class program
//生成伺服器隨機資料
for (int i = 0; i < servicescount; i++));}
//資料組排序
datacount = datacount.orderbydescending(q => q).tolist();
//輪詢拿資料組數值 每輪詢一次 根據權重分數重新分配先拿的人 且先拿高分數
//因為是資料組是降序最後分配不夠拿時按權重分配也會將差距縮小
//用資料組進行輪詢 也可以用伺服器組輪詢
foreach (var scope in datacount));}
}//列印伺服器資料
foreach (var item in service.orderby(q=>q.id))
,伺服器權重:,伺服器分數:");
console.writeline($"分數記錄:");
console.writeline();
}//列印資料組資料
int colum = 10;
console.writeline("資料組資料:");
for (int i = 0; i <= datacount.count / colum; i++)
");}
}}
平均分配演算法
平均分配有2種情況 1 都沒有記錄的時候,平均分配。若11個元素,4個cpu,則分配數量為 2,3,3,3 每次分配的起點終點表示區間為 list seqno taskcounters,list seqno 1 taskcounters 11個數,平均分給4個cpu header content t...
預約如何實現平均分配
工作當中遇到乙個問題,自己沒有想清楚。寫點文字記錄下來。場景 帶來的問題點 嘗試解決的方法 需要滿足的點 在未來40天之內,每個人分配的任務量是相對平均的。在每一天之內,每個人分配的任務量是相對平均的。其實只要做到第 2 點,自然做到第 1 點嗎?不一定 舉個例子,你每天的工資比我多200塊錢。乙個...
java JTable 列自適應大小(平均分配)
在網上看了一篇jtable自適應列寬的文章,發現設定之後最後一列會留出很長的位置,下面我對這個方法做了適當地修改,能夠平均分配每一列 public void fittablecolumns jtable mytable 將所有列的最大寬度存入陣列i中 i j width int allwidth 0...