JCSprout icon indicating copy to clipboard operation
JCSprout copied to clipboard

红包算法测试问题

Open 1yus2yus3 opened this issue 6 years ago • 2 comments

根据您的红包实现算法,自己测试了一下数据,产生200W个红包 每个红包的总金额都是200 分给10个人,按理说在每个人获得的金额在概率分布中应该是20元左右,但是测试出来的结果 有同一个共性,就是 倒数 后面几个人获取的平均值 总是距离平均值很远。从概率的角度想 不应该出现这个问题吧 bug

1yus2yus3 avatar Mar 06 '19 08:03 1yus2yus3

@1yus2yus3

请把你测试的这段代码贴下,我模拟试试。

crossoverJie avatar Mar 07 '19 16:03 crossoverJie

public static void main(String[] args) {

    Map<Integer,List<Integer>> map = new HashMap();
    for (int i = 0; i < 2000000; i++) {
        //产生红包
        RedPacket redPacket = new RedPacket();
        List<Integer> redPackets = redPacket.splitRedPacket(20000, 10);

        //System.out.println(redPackets);
        for (int j = 0; j < redPackets.size(); j++) {
            if(map.get(j) == null) {
                map.put(j,new ArrayList<Integer>());
            }
            map.get(j).add(redPackets.get(j));
        }
    }

    //对map进行数据统计
    Iterator<Map.Entry<Integer, List<Integer>>> entryIterator = map.entrySet().iterator();
    while (entryIterator.hasNext()) {
        Map.Entry<Integer, List<Integer>> next = entryIterator.next();

        List<Integer> values =  next.getValue();
        IntSummaryStatistics stats = values.stream().mapToInt((x)->x).summaryStatistics();
        System.out.println("第" + (next.getKey() + 1) + "个人获取到 平均值=" + stats.getAverage());
    }
}

1yus2yus3 avatar Mar 08 '19 09:03 1yus2yus3