c++矩阵幂
时间: 2025-03-23 21:17:47 浏览: 38
### C++中矩阵幂运算的实现
在C++中,可以通过定义一个`Matrix`类来封装矩阵的操作,并通过递归或迭代的方式实现矩阵幂运算。以下是具体的实现方式:
#### 定义矩阵类
为了方便操作,可以创建一个简单的`Matrix`类,支持基本的加法、乘法以及输入输出功能。
```cpp
#include <iostream>
#include <vector>
class Matrix {
public:
int size;
std::vector<std::vector<int>> data;
// 构造函数
Matrix(int n) : size(n), data(n, std::vector<int>(n)) {}
// 矩阵乘法
Matrix operator*(const Matrix& other) const {
Matrix result(size);
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
result.data[i][j] = 0;
for (int k = 0; k < size; ++k) {
result.data[i][j] += this->data[i][k] * other.data[k][j];
}
}
}
return result;
}
// 打印矩阵
void print() const {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
std::cout << data[i][j] << (j != size - 1 ? ' ' : '\n');
}
}
}
};
```
上述代码实现了矩阵的基本结构及其乘法操作[^1]。
#### 计算矩阵幂
利用快速幂的思想,可以在对数时间内完成矩阵幂的计算。具体来说,如果要计算 \( P^k \),则可以根据以下规则分解问题:
- 如果 \( k \) 是偶数,则 \( P^k = (P^{k/2})^2 \);
- 如果 \( k \) 是奇数,则 \( P^k = P \times P^{k-1} \)。
下面是完整的矩阵幂函数实现:
```cpp
// 快速幂算法
Matrix matrix_power(const Matrix& base, int exp) {
if (exp == 0) {
Matrix identity(base.size);
for (int i = 0; i < base.size; ++i) {
identity.data[i][i] = 1;
}
return identity;
} else if (exp % 2 == 0) {
Matrix half = matrix_power(base, exp / 2);
return half * half;
} else {
return base * matrix_power(base, exp - 1);
}
}
```
此部分代码基于递归逻辑完成了矩阵幂的高效计算。
#### 输入与输出处理
按照题目中的输入输出要求,编写主程序如下:
```cpp
int main() {
int n, k;
std::cin >> n >> k;
Matrix P(n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cin >> P.data[i][j];
}
}
Matrix result = matrix_power(P, k);
result.print();
return 0;
}
```
这段代码读取输入并调用之前定义的功能模块,最终打印结果矩阵[^2]。
---
### 性能分析
对于大小为\( n \times n \) 的矩阵,单次乘法的时间复杂度为 \( O(n^3) \)。由于采用了快速幂技术,总的复杂度降低到 \( O(\log(k) \cdot n^3) \)。
---
阅读全文
相关推荐

















