C 將陣列值平均分配的方法

2021-10-08 20:29:26 字數 1761 閱讀 8661

用處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...