超簡單的JAVA 權重分配,支援多個權重,完美實現五五開,等任何比列.
阿新 • • 發佈:2018-12-09
/** * 根據總訂單數和分配的訂單數動態調整下次分配比例 */ public class WeightTest { public static void main(String[] args) { int number = 1000;//假設1000個訂單數 Double[] weight = new Double[]{1D,2D,3D,4D,5D}; //已分配訂單數 Integer[] count = new Integer[weight.length]; for(int i= 0 ;i <number;i++) { //當前權重 Double[] current = new Double[weight.length]; for(int w=0;w<weight.length;w++) { current[w] = weight[w]/(count[w]==null?1:count[w]); } int index = 0; Double currentMax = current[0]; for(int d=1; d<current.length;d++) { //考慮全等的情況 Boolean isTrue = true; while (isTrue) { Set set = new HashSet(); for(Double c : current) { set.add(c); } if(set.size()==1) {//代表全等 for(int e=0; e<current.length;e++) { current[e] = current[e]*Math.random(); } }else { isTrue = false; } } //比較所有的數,尋找出下標最大的哪一位 if(currentMax<current[d]) { currentMax=current[d]; index =d; } } count[index]=count[index]==null?1:count[index]+1; } for(Integer i :count) { System.err.println(i); }
------------------------------
1:2 開
1:2:3:4:5 輸出如下
全部都是5 5 開的情況
說不上演算法,只是解決了自己再業務邏輯中的一些問題,如果有錯誤,請指正,希望大神不要噴~