混洗数据的算法
Algorithm to shuffle data
我有如下数据 table(字符串[][]):
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 类)随机排列数据。假设 table 中有 100 条记录,因此对于“0”中的 50 条和“1”中的 50 条,随机播放应该 return [0, 1, 0, 1, 0, 1...] . (<- 这是第一列结果,但它应该移动所有记录;将其他列与第一列混在一起)
对于“0”中的 33 个和“1”中的 67 个,第一列应该是 [0, 1, 1, 0, 1, 1, 0...].
可能会有不同的拆分,如 21-79、44-56 等。也可能有超过 100 条记录,例如。 812、1123...
有什么算法可以处理这个吗?
我想用 C# 编程,但我也可以用 excel.
我的第一个(未经测试的)想法是:
for i = 0 to 99:
if 67*i/100 <> 67*(i+1)/100:
print("1")
else:
print("0")
先数出1的个数除以行数,就知道得到1的概率p
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;
}
}
现在您可以根据目标数组随机排列行了。警告由于舍入错误,目标变量中的计数可能是错误的(差异不应超过 1,因此如果发生这种情况,您可以只调整最后一个元素)。
我有如下数据 table(字符串[][]):
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 类)随机排列数据。假设 table 中有 100 条记录,因此对于“0”中的 50 条和“1”中的 50 条,随机播放应该 return [0, 1, 0, 1, 0, 1...] . (<- 这是第一列结果,但它应该移动所有记录;将其他列与第一列混在一起)
对于“0”中的 33 个和“1”中的 67 个,第一列应该是 [0, 1, 1, 0, 1, 1, 0...].
可能会有不同的拆分,如 21-79、44-56 等。也可能有超过 100 条记录,例如。 812、1123...
有什么算法可以处理这个吗?
我想用 C# 编程,但我也可以用 excel.
我的第一个(未经测试的)想法是:
for i = 0 to 99:
if 67*i/100 <> 67*(i+1)/100:
print("1")
else:
print("0")
先数出1的个数除以行数,就知道得到1的概率p
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;
}
}
现在您可以根据目标数组随机排列行了。警告由于舍入错误,目标变量中的计数可能是错误的(差异不应超过 1,因此如果发生这种情况,您可以只调整最后一个元素)。