C 关于如何解决这个矩阵/2x2D阵列计算有什么想法吗?

C 关于如何解决这个矩阵/2x2D阵列计算有什么想法吗?,c,C,我有2个3x3矩阵,每个矩阵用2D数组表示。 第一个矩阵包含元素【我存储PID,所以元素的范围可以是数百万个Iam,只是将其简化为A在我的实际应用中,它是一个整数范围A可以是200,B可以是200000】 e、 矩阵元 { A B C B D C C F B } 第二个保存每个位置的权重 e、 g.矩阵权重 { 9 7 5 8 6 1 7 5 4 } 所以在上面的例子中,B是最重的元素,因为它的重量是7+8+4,然后是C等等 我如何找出前三名的最高元素 一种解决办法是: 是将

我有2个3x3矩阵,每个矩阵用2D数组表示。 第一个矩阵包含元素【我存储PID,所以元素的范围可以是数百万个Iam,只是将其简化为A在我的实际应用中,它是一个整数范围A可以是200,B可以是200000】 e、 矩阵元

{ A B C
  B D C
  C F B }
第二个保存每个位置的权重 e、 g.矩阵权重

{ 9 7 5
  8 6 1
  7 5 4 }
所以在上面的例子中,B是最重的元素,因为它的重量是7+8+4,然后是C等等

我如何找出前三名的最高元素

一种解决办法是: 是将元素存储在一个单独的数组中[9][2]元素、值和唯一循环元素矩阵,然后另一个循环遍历值数组并填充元素对应的值。 [迭代以创建9x2键值矩阵,迭代以排序,迭代以删除重复项需要合并权重,-有更好的方法吗?]


还有其他有效的方法吗?[提示:我只需要3个字母,所以我不应该使用9x2]

假设您知道您只有字母A-Z可用,它们是大写字母

char elems[3][3] = {
    { 'A', 'B', 'C' },
    { 'B', 'D', 'C' },
    { 'C', 'F', 'B' }
};
你也同样设置了你的重量

您可以像这样跟踪计数:

int counts[26] = {0};

for( int i = 0; i < 3; i++ ) {
    for( int j = 0; j < 3; j++ ) {
        counts[elems[i][j] - 'A'] += weights[i][j];
    }
}

然后,它只是一个查找三个最大计数的索引的例子,我相信你可以很容易地做到。

假设你知道你只有字母a-Z可用,它们是大写字母

char elems[3][3] = {
    { 'A', 'B', 'C' },
    { 'B', 'D', 'C' },
    { 'C', 'F', 'B' }
};
你也同样设置了你的重量

您可以像这样跟踪计数:

int counts[26] = {0};

for( int i = 0; i < 3; i++ ) {
    for( int j = 0; j < 3; j++ ) {
        counts[elems[i][j] - 'A'] += weights[i][j];
    }
}

然后就是找到三个最大计数的索引,我相信你可以很容易地做到。

忘记它们是2D数组,然后将两个数据源合并成一个成对的数组。例如,您将得到{'A',9},{'B',7},{'C',5},{'B',8},…}。例如,使用qsort对这些键进行排序,然后扫描列表,边做边求和,并保留找到的前3个得分键


[此解决方案始终有效,但只有当数组较大时才有意义,而在重读问题时,它们不是]。

忘记它们是二维数组,然后将两个数据源合并为一个成对的数组。例如,您将得到{'A',9},{'B',7},{'C',5},{'B',8},…}。例如,使用qsort对这些键进行排序,然后扫描列表,边做边求和,并保留找到的前3个得分键



[此解决方案始终有效,但只有当数组较大时才有意义,而在重读问题时,它们不是]。

创建一个唯一元素数组,在另一个数组中计算它们的权重之和,按第二个数组的值对第一个数组进行排序,ta daa!我会为此编写一些代码,与Aziz刚刚抛出的算法惊人地相似。@Aziz对您的解决方案给出了分数,但我认为有更有效的方法。@purpletech您的意思是在添加权重时,在每一步跟踪最高的三个?如果不允许负权重,那也没关系。等等,数组实际上是3x3,这不仅仅是一个简单的例子?创建一个唯一元素数组,在另一个数组中对它们的权重求和,按第二个数组的值对第一个数组排序,ta daa!我会为此编写一些代码,与Aziz刚刚抛出的算法惊人地相似。@Aziz对您的解决方案给出了分数,但我认为有更有效的方法。@purpletech您的意思是在添加权重时,在每一步跟踪最高的三个?如果不允许负权重,也可以。等等,数组实际上是3x3,这不仅仅是一个简单的示例?注意,如果需要处理负权重,则必须将所有计数显式初始化为INT_MIN。好的解决方案。给出了分数,但我用更好的假设更新了问题。很抱歉我真的不能使用整数计数[26]我的是一个很大的范围,它不是字符a,为了简单起见,我在示例中使用了a。让我想想。你可以用一个哈希表来索引它。你有整数,对吗?你对存储有兴趣吗?为了参数起见,您可以有一个相当稀疏的哈希表,其中包含31个元素。它最多只能储存9种元素,而且每种元素发生碰撞的几率都很低。如果你担心的话,把桌子放大一点。使用素数。注意,如果你需要处理负权重,你必须显式地初始化所有计数为INT_MIN。好的解决方案。给出了分数,但我用更好的假设更新了问题。很抱歉我真的不能使用整数计数[26]我的是一个很大的范围,它不是字符a,为了简单起见,我在示例中使用了a。让我想想。你可以用一个哈希表来索引它。你有整数,对吗?你对存储有兴趣吗?为了参数起见,您可以有一个相当稀疏的哈希表,其中包含31个元素。它最多只能储存9种元素,而且每种元素发生碰撞的几率都很低。如果你担心的话,把桌子放大一点。使用质数.Thx。我已经给出了这个解决方案作为我的答案之一。这
s解决方案使用9x2数组的额外存储,查找重复项需要另一次迭代/计算,也需要另一次迭代/计算进行排序+1泰铢。我已经给出了这个解决方案作为我的答案之一。此解决方案使用9x2阵列的额外存储,查找重复项需要另一次迭代/计算,也需要另一次迭代/计算进行排序+1林