给定size > n
数组,我们需要从数组中选择n
个元素。
例如:数组包含112个元素且n = 50,因此选择50个数字,使得每两个所选数字之间的距离大致相等(当然除了size%n == 0
之外,相等的距离是不可能的)。< / p>
如果有人提出任何可行的想法。
Example :
array = 1 2 3 4 5
n = 1
output : 1 or any another number depending on proposed algo.
n = 2
output : 1 3 or 2 4 or 1 4...
n = 3
output : 1 3 5
n = 4
output : 1 3 4 5 or 1 2 4 5
n = 5 :
output 1 2 3 4 5
基本上在n = 1,2,4的情况下,有一个可能的组合,所以我需要设计一个算法,它将以不均匀分布的方式选择数字。
答案 0 :(得分:3)
一种方法是将元素的数量除以浮点选择中所需元素的数量,并使用舍入来确定索引:
double dist = ((double)size) / n;
int *res = new int[n];
for (int i = 0 ; i != n ; i++) {
res[i] = orig[round(dist*i)];
}
对于112
和50
的示例,dist
的值为2.24
,从数组中选择的索引序列为
0 0
1 2
2 4
3 7
4 9
5 11
......
45 101
46 103
47 105
48 108
49 110