java 权重随机算法实现

import java.util.*;

/**
 * 权重随机算法实现
 * a b c d 对应权重范围 --- [0,1)、[1,3)、[3,6)、[6,10)
 */
public class RandomSF {

    private static TreeMap<String, Integer> hm = new TreeMap<>();

    public static void main(String[] args) throws Exception {
        TreeMap<String, Integer> randomMap = new TreeMap<String, Integer>();
        randomMap.put("a", 1);
        randomMap.put("b", 2);
        randomMap.put("c", 3);
        randomMap.put("d", 4);
        Integer tmp = 0;
        ArrayList<ElementWeight> arr = new ArrayList<ElementWeight>();
        for (Map.Entry<String, Integer> entry : randomMap.entrySet()) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            ElementWeight ew = new ElementWeight(key, tmp, tmp + value);
            tmp += value;
            arr.add(ew);
        }
        Random random = new Random();
        for (int j = 0; j < 100000000; j++) {
            int i = random.nextInt(tmp);
            String randomStr = binarySearch(arr, i);
            countRandomStr(randomStr);
        }
        for (ElementWeight ew:arr) {
            System.out.println(ew.getElement()+"的权重范围:"+"["+ew.getLow()+","+ew.getHigt()+")");
        }
        System.out.println(hm);
    }

//    二分查找实现
    public static String binarySearch(ArrayList<ElementWeight> arr, int num) {
        int high = arr.size();
        int low = 0;
        while (high >= low) {
            int middle = (high + low) / 2;
            ElementWeight ew = arr.get(middle);
            if (num >= ew.getLow() && num < ew.getHigt()) {
                return ew.getElement();
            } else if (num >= ew.getHigt()) {
                low = middle + 1;
            } else if (num < ew.getLow()) {
                high = middle - 1;
            }
        }
        return null;
    }

//  权重元素实体类
    static class ElementWeight {
        private String element;
        private Integer low;
        private Integer higt;

        public ElementWeight(String element, Integer low, Integer higt) {
            this.element = element;
            this.low = low;
            this.higt = higt;
        }

        public String getElement() {
            return element;
        }

        public Integer getLow() {
            return low;
        }

        public Integer getHigt() {
            return higt;
        }

    }

//  统计随机string的个数
    public static void countRandomStr(String str) {
        Integer value = hm.get(str);
        if (value == null) {
            hm.put(str, 1);
        } else {
            hm.put(str, ++value);
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 扬州城,久封的冰面逐渐消融,岸边的剪春罗初吐芬芳。喧闹的黄莺,挑逗着刚冒嫩黄新芽的婆娑碧柳,灰蒙蒙的天空,轻柔...
    庸人自扰374阅读 2,555评论 0 0
  • 作者 张怀彦 搬迁忙 无处说商量 没了老瓦房 没了村庄 没了树梢—— 没了月亮风光的地方 轻轻找回那月亮 送给心上...
    张怀彦阅读 1,450评论 2 3
  • TestDog.java 文件代码: class Animal{ public void move(){ ...
    c667ec5a71d8阅读 3,318评论 0 1
  • 1850年代中期,巴黎主办的世界博览会上,一种来自日本的绚丽的、名为浮世绘的版画首次在西方世界展出,而在更早之前,...
    骆驼计划艺术阅读 3,130评论 1 1
  • 六月的一个阴霾的早晨,在无聊的税法课上,江川在埋头写东西,只是写得东西与上课毫无关联。 江川偶尔抬头看看周围,所有...
    冬亭暖酒阅读 1,801评论 0 2

友情链接更多精彩内容