从数组中选择n个元素

问题描述:

给出size > n的数组,我们需要从数组中选择n个元素。从数组中选择n个元素

例如:数组包含112元件和n = 50,所以选择50号,使得每两个选定数目之间的距离是或多或少相等(距离相等是不可能的,当然除了size%n == 0)。

如果有人提出任何可行的想法。

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 

基本上在正的情况下= 1,2,4有多于一个可能的组合,所以我需要设计一种算法中这将挑uequally分布的方式编号。

+1

数组中的差异或距离? – YSC

+0

还有什么限制? ...例如n个不连续的元素? – fritzone

+0

@YSC这是距离。 – EmptyData

一种方法是除以在选择所需的元素的数量的元件的数目在浮点,以及使用舍入来确定指数:

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 
+0

如何,你_did_得到的问题。它是最好的答案,在最后时刻四舍五入。 – YSC