1. 程式人生 > 其它 >演算法實驗報告2——矩陣連乘問題——2020.12.17

演算法實驗報告2——矩陣連乘問題——2020.12.17

技術標籤:python演算法-每日一練演算法python資料結構java線性代數

演算法實驗報告2——矩陣連乘問題

一丶矩陣連乘問題

A1 A2 A3 A4 A5 A6
3035 3515 155 510 1020 2025
求最小數乘次數。

二丶矩陣連乘程式碼

# coding=gbk
__author__ = 'Blockchain_Key'
__time__ = '2020.12.17'

# row_num 行數
# col_num 列數
class Matrix:
    def
__init__(self, row_num=0, col_num=0, matrix=None): if matrix != None: self.row_num = len(matrix) self.col_num = len(matrix[0]) else: self.row_num = row_num self.col_num = col_num self.matrix = matrix def matrix_chain(matrixs): matrix_num =
len(matrixs) # 求取矩陣個數 count = [[0 for j in range(matrix_num)] for i in range(matrix_num)] # 建立二維動態規劃表 flag = [[0 for j in range(matrix_num)] for i in range(matrix_num)] # 建立二維標識矩陣 for interval in range(1, matrix_num + 1): # 從1開始,方便計算 for i in range(matrix_num - interval):
# 剩餘的矩陣 j = i + interval count[i][j] = count[i][i] + count[i + 1][j] + matrixs[i].row_num * matrixs[i + 1].row_num * matrixs[j].col_num flag[i][j] = i for k in range(i + 1, j): temp = count[i][k] + count[k + 1][j] + matrixs[i].row_num * matrixs[k + 1].row_num * matrixs[j].col_num if temp < count[i][j]: count[i][j] = temp flag[i][j] = k traceback(0, matrix_num - 1, flag) return count[0][matrix_num - 1] # 最終結果 def traceback(i, j, flag): if i == j: return # 遞迴處理 traceback(i, flag[i][j], flag) traceback(flag[i][j] + 1, j, flag) if __name__=="__main__": matrixs = [Matrix(30, 35), Matrix(35, 15), Matrix(15, 5), Matrix(5, 10), Matrix(10, 20), Matrix(20, 25)] result = matrix_chain(matrixs) print(result)

三丶執行結果

在這裡插入圖片描述

——虎鼓瑟兮鸞回車,仙之人兮列如麻——