Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 数据洗牌算法_Algorithm_Sorting_Shuffle - Fatal编程技术网

Algorithm 数据洗牌算法

Algorithm 数据洗牌算法,algorithm,sorting,shuffle,Algorithm,Sorting,Shuffle,我有如下数据表(字符串[][]): 0, b, b, b 0, b, a, c 0, b, c, b 0, c, b, a 1, b, b, c 1, b, a, b 0, a, b, c 0, a, b, b ... 我需要按第一列洗牌数据(总是2个类)。假设表中有100条记录,所以对于“0”中的50条和“1”中的50条,shuffle应该返回[0,1,0,1,0,1…]。(我的第一个(未经测试的)想法是: 对于i=0到99: 如果67*i/100 67*(i

我有如下数据表(字符串[][]):

0, b, b, b  
0, b, a, c  
0, b, c, b  
0, c, b, a  
1, b, b, c  
1, b, a, b  
0, a, b, c  
0, a, b, b  
...
我需要按第一列洗牌数据(总是2个类)。假设表中有100条记录,所以对于“0”中的50条和“1”中的50条,shuffle应该返回[0,1,0,1,0,1…]。(我的第一个(未经测试的)想法是:

对于i=0到99:
如果67*i/100 67*(i+1)/100:
打印(“1”)
其他:
打印(“0”)

事实上,它是有效的:

首先计算1的数量,然后除以行数,这样你就知道p得到1的概率

int count = 0;
for (int i = 0; i < arr.length; i++)
    if ("1".equals(arr[i][0]))
        count++;
double p = ((double)count) / arr.length;
int[] goal = new int[arr.length];
double t = 0;
for (int i = 0; i < goal.length; i++) {
    t += p;
    if (t >= 1) {
        t--;
        goal[i] = 1;
    } else {
        goal[i] = 0;
    }
}
int count=0;
对于(int i=0;i=1){
t--;
目标[i]=1;
}否则{
目标[i]=0;
}
}

现在,您可以根据目标数组洗牌行。警告:由于舍入错误,目标变量中的行数可能会错误(差异不应超过1,因此,如果出现这种情况,您可以调整最后一个元素)。

效果很好,但我不够精确,因此我在问题中做了一些更改。
int count = 0;
for (int i = 0; i < arr.length; i++)
    if ("1".equals(arr[i][0]))
        count++;
double p = ((double)count) / arr.length;
int[] goal = new int[arr.length];
double t = 0;
for (int i = 0; i < goal.length; i++) {
    t += p;
    if (t >= 1) {
        t--;
        goal[i] = 1;
    } else {
        goal[i] = 0;
    }
}