假设我有这两个包含 5 个单元格的排序数组:
数组中的数字在2到14之间(包括2到14都是整数)
现在,我需要从 [0,100] 开始对每个数组进行排名,最低的数组将是:
[2,2,2,2,2] 最高的是 [14,14,14,14,14]
现在的问题是:索引很重要,例如,如果我们看一下这些数组:
1) [2,2,2,2,10]
2) [8,8,8,8,9]
所以第一个比第二个好,会得到更高的分数。
如果索引中有一个平局(从右到左),例如:
1) [3,4,5,10,13]
2) [3,4,7,10,13]
所以索引号:3 和 4 是相同的,但是因为 7 比 5 高。所以在这种情况下,第二个数组将具有更高的分数。
我在数学上苦苦挣扎,我的意思是我想高效地完成它,现在我可以做类似的事情:
2^array[i] 但它不会有效率,所以我设法做的主要事情是
double rank = 0;
for (int i = 0; i < 5; i++)
{
rank += (double)array[i] / 14 + i;
}
因为如果 array[i] 可以在 2 到 14 之间,所以 1/7 <= array[i]/14 <= 1 所以我认为,如果我在每次迭代中都添加 + i,那么下一次迭代将大于所有之前的迭代,但这是错误的。
我很乐意在这里提供一些帮助。
最佳答案
您实际上是在描述一个以 13 为基数的数字。每个“数字”(数组位置)代表 13 个不同的有序值之一。
您可以通过将数组转换为 5 位数、以 13 为底的值来计算排名:
- 从每个数组元素的值中减去 2 以将元素值规范化到范围 0..12。
- 给每个数组元素一个分数 =(归一化元素值)*(13 的数组索引次方)。 1)
- 将分数相加。
1) 或提高到 Array.Length - 数组索引,具体取决于数组的哪一侧应该是最不重要的。
关于c# - 在数组中更喜欢高索引号而不是低索引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261345/