已知稀疏矩阵A和B,编程代码实现基于三元组顺序表实现A+B的运算
时间: 2024-02-22 10:00:46 浏览: 36
用三元组实现的稀疏矩阵运算
以下是基于三元组顺序表实现稀疏矩阵 A+B 的 Python 代码:
```python
class SparseMatrix:
def __init__(self, row, col, data):
self.row = row
self.col = col
self.data = data
def __str__(self):
result = ""
for i in range(self.row):
for j in range(self.col):
value = 0
for k in range(len(self.data)):
if self.data[k][0] == i and self.data[k][1] == j:
value = self.data[k][2]
break
result += str(value) + " "
result += "\n"
return result.strip()
def __add__(self, other):
if self.row != other.row or self.col != other.col:
raise ValueError("两个矩阵的行列数不相等")
result_data = []
p1, p2 = 0, 0
while p1 < len(self.data) and p2 < len(other.data):
if self.data[p1][0] < other.data[p2][0] or (self.data[p1][0] == other.data[p2][0] and self.data[p1][1] < other.data[p2][1]):
result_data.append(self.data[p1])
p1 += 1
elif self.data[p1][0] > other.data[p2][0] or (self.data[p1][0] == other.data[p2][0] and self.data[p1][1] > other.data[p2][1]):
result_data.append(other.data[p2])
p2 += 1
else:
if self.data[p1][2] + other.data[p2][2] != 0:
result_data.append((self.data[p1][0], self.data[p1][1], self.data[p1][2] + other.data[p2][2]))
p1 += 1
p2 += 1
while p1 < len(self.data):
result_data.append(self.data[p1])
p1 += 1
while p2 < len(other.data):
result_data.append(other.data[p2])
p2 += 1
return SparseMatrix(self.row, self.col, result_data)
```
其中,稀疏矩阵用三元组顺序表存储,即 `data` 列表中的每个元素是一个元组 `(i, j, value)`,表示第 `i` 行第 `j` 列的值为 `value`。`__str__` 方法用来将稀疏矩阵转化为字符串输出。`__add__` 方法用来实现矩阵加法,首先判断两个矩阵的行列数是否相等,然后按照三元组顺序表的顺序遍历两个矩阵的非零元素,并将它们相加得到新的结果矩阵。
阅读全文