已知稀疏矩阵采用三元组表压缩存储,试编写算法求稀疏矩阵中所有数的平均数 C++
时间: 2024-11-03 15:23:13 浏览: 37
在C++中,如果我们要计算稀疏矩阵(通常是一个稀疏数组表示,比如使用`std::vector<std::pair<int, int>>`或`std::vector<std::tuple<int, int, double>>`)中所有元素的平均值,我们需要遍历这个三元组表,并对所有非零元素求和,然后除以总元素的数量。以下是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
double averageOfSparseMatrix(const std::vector<std::tuple<int, int, double>>& sparseMatrix) {
if (sparseMatrix.empty()) {
return 0; // 矩阵为空,返回0作为平均值
}
int nonZeroCount = 0;
double sum = 0;
for (const auto& [row, col, value] : sparseMatrix) {
if (value != 0) { // 只考虑非零元素
sum += value;
nonZeroCount++;
}
}
return nonZeroCount > 0 ? sum / nonZeroCount : 0; // 非零元素不为0的情况下才计算平均值
}
int main() {
std::vector<std::tuple<int, int, double>> sparseArray = {{1, 0, 3.5}, {2, 1, 0}, {0, 3, 2.7}};
double avg = averageOfSparseMatrix(sparseArray);
std::cout << "Average of the sparse matrix is: " << avg << std::endl;
return 0;
}
```
在这个例子中,我们首先检查矩阵是否为空。接着,对于每个元素,我们检查它是否为非零值,如果是,则累加到总和并增加计数器。最后,如果存在非零元素,我们就返回它们的平均值;否则,返回0。
阅读全文