奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

權重隨機算法的java實現

時間:2024-08-13 15:25:57 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通用組合算法如何實現09-12

關于Java動態實現的方法08-23

PID算法的C語言實現07-19

實現java屏幕抓屏的方法08-24

java中全排列是如何生成算法09-05

Java常用的五大排序算法09-09

java構造函數實現代碼示例08-23

C語言實現歸并排序算法實例09-18

C#實現協同過濾算法的實例代碼06-19

關于java實現http請求工具類示例09-09

主站蜘蛛池模板: 田阳县| 邵阳市| 罗平县| 兴安盟| 南开区| 仁怀市| 栾川县| 马边| 班玛县| 社旗县| 吉林省| 黔西| 漳州市| 建水县| 大丰市| 昆明市| 香河县| 南丰县| 博白县| 广河县| 阿拉尔市| 商河县| 遵义县| 剑河县| 唐海县| 长宁区| 烟台市| 上高县| 池州市| 安阳市| 泌阳县| 桂平市| 水富县| 武功县| 宁河县| 静海县| 富蕴县| 德江县| 北流市| 博兴县| 砀山县|