从数组中选择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分布的方式编号。
答
一种方法是除以在选择所需的元素的数量的元件的数目在浮点,以及使用舍入来确定指数:
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
+0
如何,你_did_得到的问题。它是最好的答案,在最后时刻四舍五入。 – YSC
数组中的差异或距离? – YSC
还有什么限制? ...例如n个不连续的元素? – fritzone
@YSC这是距离。 – EmptyData