从矩阵中寻找最大值:优化方式

时间:2015-03-25 20:39:04

标签: c++ c

我想从这个尺寸为25的5x5矩阵/数组中找出最大数量。 我正在使用下面的技巧。但我想知道任何其他方式我可以优化这个逻辑或任何其他逻辑也欢迎。标记c和cpp以获得更多的覆盖这个问题。

//Dummy code :
#include <stdio.h>
inline int max_val(int x, int y)
{
    return (x > y)? x : y;
}
int main(){
int src[25] =  {19,26, 34, 48, 50 , 24, 95, 91, 54, 28,47, 45, 48, 68, 24 ,27, 10, 20, 28, 65 ,98, 96, 94, 92, 20};
/*  just showed as example
19 26 34 48 50  
24 95 91 54 28  
47 45 48 68 24  
27 10 20 28 65  
98 96 94 92 20  */

int dst[25]={0} ;//purposefully not initialised as it is dummy code
int width = 5;
int* pImage0 = src;
int* pImage1 = pImage0 + width;
int* pImage2 = pImage1 + width;
int* pImage3 = pImage2 + width;
int* pImage4 = pImage3 + width;
int BoxMax0,BoxMax1,BoxMax2,BoxMax3,BoxMax4,BoxMax;
for(int loop =0; loop<25;loop++){
    BoxMax0 = max_val((pImage0[0]),max_val((pImage0[1]),max_val((pImage0[2]),max_val(pImage0[3],pImage0[4]))));
    BoxMax1 = max_val((pImage1[0]),max_val((pImage1[1]),max_val((pImage1[2]),max_val(pImage1[3],pImage1[4]))));
    BoxMax2 = max_val((pImage2[0]),max_val((pImage2[1]),max_val((pImage2[2]),max_val(pImage2[3],pImage2[4]))));
    BoxMax3 = max_val((pImage3[0]),max_val((pImage3[1]),max_val((pImage3[2]),max_val(pImage3[3],pImage3[4]))));
    BoxMax4 = max_val((pImage4[0]),max_val((pImage4[1]),max_val((pImage4[2]),max_val(pImage4[3],pImage4[4]))));
    BoxMax  = max_val(BoxMax0,max_val(BoxMax1,max_val(BoxMax2,max_val(BoxMax3,BoxMax4)));
    pImage0++;
    pImage1++;
    pImage2++;
    pImage3++;
    pImage4++;
    dst[loop] = BoxMax;
}
return 0;
}

1 个答案:

答案 0 :(得分:3)

我不确切知道你的代码应该做什么(尤其是当你访问src之外的内存位置时),但我差点打赌

int max = *std::max_element(begin(src), end(src));

实际上比你的构造更快。