<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            權重隨機算法的java實現

            時間:2025-03-11 06:38:28 java語言 我要投稿
            • 相關推薦

            權重隨機算法的java實現

              本文實例講述了Java權重隨機的實現方法。分享給大家供大家參考。具體分析如下:

              權重隨機在項目中經常用到,所以我把它抽象到一個工具類中。

              一般實現隨機權重有兩種方式:

              1. 使用一個數組存放權重對應的實際目標,比如A的權重是2,B的權重是3,那么數組長度為5, 數組前兩個存放A,后三個存放B。

              然后隨機一個[0-數據長度)的數字,直接取數組對應下標的值就可以了。

              優點:數據結構簡單,算法高效,實現簡單

              缺點:當權重值比較大同時數據又比較多的時候,會浪費內存

              2. 使用區間算法,從前到后依次疊加權重,然后隨機一個[1-權重和]的數字,再用隨機的權重依次減去每個元素的權重,當第一個小于等于0的元素就是我們找元素

              這里實現可以借用Arrays的binarySearch方法。

              完整實例代碼點擊此處本站下載。

              貼一下代碼:

              WeightMeta.java:

              復制代碼 代碼如下:/**

              * 建議使用RandomUtil類創建RandomMeta對象

              * @author wxf on 14-5-5.

              */

              public class WeightMeta{

              private final Random ran = new Random();

              private final T[] nodes;

              private final int[] weights;

              private final int maxW;

              public WeightMeta(T[] nodes, int[] weights) {

              this.nodes = nodes;

              this.weights = weights;

              this.maxW = weights[weights.length - 1];

              }

              /**

              * 該方法返回權重隨機對象

              * @return

              */

              public T random() {

              int index = Arrays.binarySearch(weights, ran.nextInt(maxW) + 1);

              if (index < 0) {

              index = -1 - index;

              }

              return nodes[index];

              }

              public T random(int ranInt) {

              if (ranInt > maxW) {

              ranInt = maxW;

              } else if(ranInt < 0){

              ranInt = 1;

              } else {

              ranInt ++;

              }

              int index = Arrays.binarySearch(weights, ranInt);

              if (index < 0) {

              index = -1 - index;

              }

              return nodes[index];

              }

              @Override

              public String toString() {

              StringBuilder l1 = new StringBuilder();

              StringBuilder l2 = new StringBuilder("[random]t");

              StringBuilder l3 = new StringBuilder("[node]tt");

              l1.append(this.getClass().getName()).append(":").append(this.hashCode()).append(":n").append("[index]tt");

              for (int i = 0; i < weights.length; i++) {

              l1.append(i).append("t");

              l2.append(weights[i]).append("t");

              l3.append(nodes[i]).append("t");

              l1.append("n");

              l2.append("n");

              l3.append("n");

              return l1.append(l2).append(l3).toString();

              RandomUtil.java:

              復制代碼 代碼如下:/**

              * 隨機工具類

              * 使用權重的集合Map構建隨機元數據對象

              * 比如:

              * 我們有3個url地址,他們的權重分別為1,2,3現在我們利用RandomUtil來根據權重隨機獲取url:

              * map.put(url1, 1);

              * map.put(url2, 2);

              * map.put(url3, 3);

              * RandomMetamd = RandomUtil.buildWeightMeta(map);

              * String weightRandomUrl = md.random();

              * @author wxf on 14-5-5.

              */

              public class RandomUtil {

              public staticWeightMetabuildWeightMeta(final MapweightMap) {

              final int size = weightMap.size();

              Object[] nodes = new Object[size];

              int[] weights = new int[size];

              int index = 0;

              int weightAdder = 0;

              for (Map.Entryeach : weightMap.entrySet()) {

              nodes[index] = each.getKey();

              weights[index++] = (weightAdder = weightAdder + each.getValue());

              }

              return new WeightMeta((T[]) nodes, weights);

              }

              }

              希望本文所述對大家的Java程序設計有所幫助。

            【權重隨機算法的java實現】相關文章:

            java通用組合算法如何實現05-12

            JAVA簡單選擇排序算法及實現02-10

            如何實現java漢諾塔遞歸算法04-20

            java算法實現排列組合的方法介紹03-08

            冒泡排序算法原理及JAVA實現代碼方法03-20

            Java基于余弦方法實現的計算相似度算法示例02-10

            Java排序算法06-17

            PHP實現抽獎概率算法03-21

            java常見的排序算法的代碼03-26

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院