以线性/均匀方式在列表2上分配列表1不等长的值

时间:2016-06-11 22:47:41

标签: c# algorithm linq math

我有2 IContextMenu 不等长度。

得分成绩

根据配置,一个或另一个列表大于另一个。

有两种情况:

用例1: 60分和50年级 - 1至6年级 -

我必须以均匀的方式分配50个等级的60个分数。 因此,许多等级将具有多个相关的连续分数(1:关于数据结构的N关系)

用例2: 40个分数和50个等级 - 1到6个等级 -

我必须以均匀的方式分发超过50个等级的40个分数。 因此,必须平均删除10个等级(50 - 40),以获得分数和等级之间的1:1关系数据结构。

我可以使用哪种算法来解决C#的问题?

我在这里写下了运行实施的algorythm时我希望看到的结果数据。

用例1样本结果数据:

List<float>

用例2样本结果数据:

Scores  Grade
0   6
1   5,9
2 - 3   5,8
4   5,7
5   5,6
6   5,5
7   5,4
8 - 9   5,3
10  5,2
11  5,1
12  5
13  4,9
14 - 15 4,8
16  4,7
17  4,6
18  4,5
19  4,4
20 - 21 4,3
22  4,2
23  4,1
24  4
25  3,9
26 - 27 3,8
28  3,7
29  3,6
30  3,5
31  3,4
32 - 33 3,3
34  3,2
35  3,1
36  3
37  2,9
38 - 39 2,8
40  2,7
41  2,6
42  2,5
43  2,4
44 - 45 2,3
46  2,2
47  2,1
48  2
49  1,9
50 - 51 1,8
52  1,7
53  1,6
54  1,5
55  1,4
56 - 57 1,3
58  1,2
59  1,1
60  1

C#转换代码为y = f(x); - )

Score   Grade
0   6
1   5,9
2   5,8
3   5,6
4   5,5
5   5,4
6   5,3
7   5,1
8   5
9   4,9
10  4,8
11  4,6
12  4,5
13  4,4
14  4,3
15  4,1
16  4
17  3,9
18  3,8
19  3,6
20  3,5
21  3,4
22  3,3
23  3,1
24  3
25  2,9
26  2,8
27  2,6
28  2,5
29  2,4
30  2,3
31  2,1
32  2
33  1,9
34  1,8
35  1,6
36  1,5
37  1,4
38  1,3
39  1,1
40  1

1 个答案:

答案 0 :(得分:1)

假设gradesArray是由y索引的输入数组,scoresArray是由x索引的输出数组。要生成输出数组,对于输出数组中的每个索引,需要从输入数组中选择相应的值。在伪代码中:

scoresArray[x] = gradesArray[y]   where y = f(x)

单词中,每个输出值scoresArray[x]取自输入数组y中的位置gradesArray[y],其中yx的某个函数。那个功能是什么?嗯,这是一条线。

以下是使用line drawing algorithm解决用例1的示例代码:

int x, y, accum;
int scores = 61;
int grades = 51;
float[] gradesArray = new float[grades];
float[] scoresArray = new float[scores];

for (y = 0; y < grades; y++)
    gradesArray[y] = 6.0f - y / 10.0f;

accum = (scores-1) / 2;
y = 0;
for (x = 0; x < scores; x++)
{
    scoresArray[x] = gradesArray[y];
    accum += (grades-1);
    y += accum / (scores-1);
    accum %= (scores-1);
}

要修改用例2的代码,只需将int scores = 61更改为int scores = 41