从数组中选择n个元素

时间:2016-02-26 11:04:09

标签: c++ algorithm

给定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的情况下,有一个可能的组合,所以我需要设计一个算法,它将以不均匀分布的方式选择数字。

1 个答案:

答案 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)];
}

对于11250的示例,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