c# - 在数组中更喜欢高索引号而不是低索引号

标签 c# arrays algorithm integer

假设我有这两个包含 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/

相关文章:

c# - 我想从串行端口读取电位器的 int,但它一直显示 (4⸮⸮⸮⸮j⸮/⸮。)

c# - 如何在 .razor.cs 文件后面注入(inject) blazor 代码?以 IJSRuntime 为例

c# - LINQ OrderBy 子句 - 强制特定字符串始终位于顶部

php - 用数组中的空格和大写第一个字符替换下划线

algorithm - 顶点和边之间的差异 [图形、算法和 DS]

algorithm - 检查给定 nash 十六进制板的快速算法是什么?

java - 如何找到多个簇之间的最短路径

c# - 生成不重复的随机数数组

c++ - 指向数组的指针的声明 - 访问问题

arrays - 在angular2中过滤数组