在C++中查找矩阵的最大值,最小值和平均值

在C++中查找矩阵的最大值,最小值和平均值

问题描述:

如何在C++中找到给定矩阵(matrix[i][j])中的最大值,最小值和平均值。该类型是无符号long double。在C++中查找矩阵的最大值,最小值和平均值

+4

** unsigned ** long double?你的平台有无符号浮点类型? – 2011-02-08 16:36:28

+4

这是您在过去几个小时就此主题询问的第三个问题。这些家庭作业问题是偶然的吗? – 2011-02-08 16:37:35

遍历所有值,记录当前的最大值,最小值和累计和。然后用累积和除以元素数来得到平均值。

没有什么聪明,在这里完成的(只有伪代码,因为这闻起来像HW):

for each entry in the matrix: 
    add the entry to a running sum 
    compare the entry to a running min 
     if it's smaller, it's the new running min 
    compare the entry to a running max 
     if it's larger, it's the new running max 
average is the sum divided by the number of entries 

可微优化这个循环,使其或多或少的效率,但没有什么可以做算法上更聪明。无论如何,您都需要查看所有i*j条目。

也许这:

最大

int maximum = 0; 
for(int x=0; x<width; ++x) 
    for(int y=0; y<height; ++y) 
    maximum = std::max(matrix[x][y], maximum); 

最低

int minimum = 0; 
for(int x=0; x<width; ++x) 
    for(int y=0; y<height; ++y) 
    minimum = std::min(matrix[x][y], minimum); 

Avarage

int avarage = 0; 
for(int x=0; x<width; ++x) 
    for(int y=0; y<height; ++y) 
    avarge += matrix[x][y]; 
avarge /= width*height; 

假设matrix是一个实际的C++二维数组,你可以使用标准算法。

未经测试的代码:

long double mean = std::accumulate(matrix[0], matrix[0] + i*j, 0.0)/(i*j); 
long double matrix_min = std::min_element(matrix[0], matrix[0] + i*j); 
long double matrix_max = std::max_element(matrix[0], matrix[0] + i*j); 

请注意,这样做额外越过矩阵,由于它是清楚它在做什么好处。

如果是另一种类型的容器,如vectorvector,那么您必须在每一行上运行算法,并取每行的最大值。