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;
}
}