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

下列代码中人为的规定了是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;
    }
}
时间: 2024-11-13 09:33:26

用权值实现数据被抽取的概率的相关文章

以分钟为单位进行数据的抽取并作平均

问: 现在有一个表,里面内容是每10秒一条(1天为6*60*24=8640条),然后我现在要做的是以5分钟为一个时间点取数据(一天为12*24=288条),一次性把所有满足条件的值取出来. 应该怎么写? 答:SQL语句如下: 每分钟为单位做数据的抽取: select node_id,avg(ad1_value) as AD1_VALUE,avg(ad2_value) as AD2_VALUE,date_format(collect_date,'%Y-%m-%d %H:%i') as collec

ETL中的数据增量抽取机制

ETL中的数据增量抽取机制 (     增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过程中,增量更新的效率和可行性是决定ETL实施成败的关键问题之一,ETL中的增量更新机制比较复杂,采用何种机制往往取决于源数据系统的 类型以及对增量更新性能的要求. 1 ETL概述 ETL包括数据的抽取.转换.加载.①数据抽取:从源数据源系统抽取目的数据源系统需要的数据:②数据转换:将从源数据源获取的

python数据挖掘(从数据集中抽取特征)

大多数数据挖掘算法都依赖于数值或类别型特征,从数据集中抽取数值和类别型特征,并选出最佳特征. 特征可用于建模, 模型以机器挖掘算法能够理解的近似的方式来表示现实 特征选择的另一个优点在于:降低真实世界的复杂度,模型比现实更容易操纵 特征选择 scikit-learn中的VarianceThreshold转换器可用来删除特征值的方差达不到最低标准 的特征. import numpy as np x= np.arange(30).reshape((10,3))#10个个体.3个特征的数据集 prin

EffectiveC#6--区别值类型数据和引用类型数据

1. 设计一个类型时,选择struct或者class是件简单的小事情,但是,一但你的类型发生了改变, 对所有使用了该类型的用户进行更新却要付出(比设计时)多得多的工作. 2.值类型:无多态但性能佳. 值类型(结构)存储数据,而引用类型(类)表现行为或职责. 3. public class C { private MyType _a = new MyType( ); private MyType _b = new MyType( ); // Remaining implementation rem

VUE通过索引值获取数据不渲染的问题

问题:vue里面当通过索引值获取数据时,ajax数据成功返回,但是在火狐下不渲染 解决: 原文地址:https://www.cnblogs.com/zjp-/p/10306665.html

ch5-处理数据,抽取-整理-推导

场景:教练kelly有4个选手James\Sarah\Julie\Mikey,他们每跑600米,教练就会计时并把时间记录在计算机的一个文件中,总共4个文件:James.txt\Sarah.txt\Julie.txt\Mikey.txt,分别记录4个选手的时间数据. 期望:教练需要一种快捷的方法能够很快了解到每个选手跑的最快的3个时间. 1.将文件中选手数据读入到各自的列表中,并屏幕显示这些列表: data.strip().split(','):此为“方法串链”,从左到右读这种方法链. 2.对数据

ModelDriven和prepareable接口解决update时,只会保存提交的数据,而将其余为重新设值的数据update为空的问题

1 public class EmployeeAction0 extends BaseAction implements 2 ModelDriven<Employee>, Preparable { 3 private IEmployeeService employeeService; 4 private PageResult<Employee> pageResult; 5 private Employee employee; 6 // 必须进行实例化 7 private Emplo

MySQL to Hbase 数据的抽取

一个简单粗暴的方法从MySQL数据库抽取数据到Hbase实现的过程: rowKey利用MySQL表的主键ID特性作为HBASE的id code: #### #!/usr/bin/env python #coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import MySQLdb import datetime,time sys.path.append('/usr/lib/python2.6/site-pack

学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向

数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map);, * 相当于把结果数据放到request里面 * @return * @throws Exception */ @RequestMapping("/toPerson4.do") public ModelAndView toPerson4() throws Exception{ Per