文档章节

用权值实现数据被抽取的概率

刘春辉
 刘春辉
发布于 2014/11/18 19:09
字数 616
阅读 139
收藏 7

下列代码中人为的规定了是20个人.

RandomTest.java

import java.util.Random;
import java.util.Scanner;

public class RandomTest {
    public static void main(String[] args) {

        /**
         * 定义一个工具类
         */
        Tool tool = new Tool();

        String[] names = new String[20]; // 定义一个长度为20的名字数组,并给名字赋值
        names = tool.addName(names);

        int[] marks = new int[20];        //定义一个长度为20的标记数组,初始化为0
        double[] scores = new double[20]; // 定义一个长度为20的总分数数组,初始化为0
        int[] times = new int[20];        // 定义一个长度为20的答题次数数组,初始化为0
        int[] weights = new int[20];      // 定义一个长度为20的权重,初始化为0
        int sumPeople = 19;               // 判断抽取人的次数,在没每个人都被提问一次时
        int sumTime = 0;                  // 记录在二次重复提取人时,提取人的次数,处理重复提取问题

        Random random = new Random();

        Scanner in = new Scanner(System.in);

        while (true) {

            /**
             * 首先保证所有的人都被提问到
             */
            while ( sumPeople >= 0) {

                int point =  random.nextInt(20);   // 随机抽取被提问人的序号

                if (marks[point] != 1) {           // 判断抽取到的人是否被提问过,如果提问过则重新随机抽取

                    System.out.println("当前为: " + names[point]);
                    marks[point] = 1;
                    times[point] += 1;     // 统计学生回答问题的次数
                    scores[point] = scores[point]  + in.nextDouble();  // 统计学生回答问题的总成绩
                    weights[point] = (int)( scores[point] / times[point] - 11 ) * (-1); // 根据总成绩和次数来求得权值
                    sumPeople -= 1;
                }

            }

            int weightSum = 0;     // 求权值的和
            for(int weight : weights) {
                weightSum += weight;
            }

            int point = random.nextInt(weightSum);  // 从权值和中随机取出数值,用来找对应的学生的位置
            int variable = 0;    // 记录人成绩的权值,用来判断随机数落在哪个范围内

            for (int i = 0; i < 20; i++ ) {

                variable += weights[i];

                if (variable >= point && marks[i] != 0) {   // marks[i] != 0用来保证同一个人不能被重复提问
                    System.out.println("二次当前为: " + names[i]);
                    times[i] += 1;
                    scores[i] = scores[i]  + in.nextDouble();
                    weights[i] = (int)( scores[i] / times[i] - 11 ) * (-1);
                    marks[i] = 0;
                    sumTime += 1;
                    break;
                }

            }

            if (sumTime % 20 == 0) {
                for (int i = 0; i < 20; i ++) {
                    marks[i] =  0;
                }
            }
        }

    }
}

Tool.java

public class Tool {

    /**
     * 给名字数组初始化
     * @param names
     * @return
     */
    public String[] addName(String[] names) {

        for (int i = 0; i < names.length;i++) {
            names[i] =  "100" +  i;
        }

        return names;
    }
}



© 著作权归作者所有

刘春辉
粉丝 4
博文 18
码字总数 5952
作品 0
淄博
程序员
私信 提问
Bagging和Boosting 概念及区别

Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。 首先介绍B...

ccj_ok
2017/09/22
0
0
控制随机抽中几率 [ C# | Random ]

一、文字解说: 为待随机抽取的集合每个项加一个权值,这个权值就是随机几率,比如正常被抽正的几率为1,那么将希望被抽中几率更大的项的权值设置为3或5,然后随机抽取集合中的项,并将随机数...

walb呀
2017/12/07
0
0
卷积的发展历程,原理和基于 TensorFlow 的实现

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 稀疏交互 在生物学家休博尔和维瑟尔早期关于猫视觉皮层的研究中发现,视觉皮层中...

磐石001
2018/04/02
0
0
python机器学习案例教程——K最近邻算法

全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 今天我们使用k最近邻算法来构建白酒的价格模型。 构造数据集 构建一个葡萄酒样本数据集。白酒的价格跟等级、年代有很大的关系。...

luanpeng825485697
2017/12/15
0
0
血战麻将算法

算法简介 本文的麻将算法不是按人工智能的方式进行讲解,本人从事游戏服务器开发。所以该算法主要用于一般的麻将游戏机器人,主要是让机器人具有正常操作选择。算法无法与现实生活中的麻将高...

shezjl
2016/03/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部