最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

動態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法

 更新時間:2017年11月27日 12:28:11   作者:欠扁的小籃子  
這篇文章主要介紹了動態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法,較為詳細(xì)的分析了矩陣連乘問題的概念、原理并結(jié)合實(shí)例形式分析了Python相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了動態(tài)規(guī)劃之矩陣連乘問題Python實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

給定n個矩陣{A1,A2,…,An,其中Ai與Ai+1是可乘的,i=1,2 ,…,n-1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數(shù)乘次數(shù)最少。

例如:

A1={30x35} ; A2={35x15} ;A3={15x5} ;A4={5x10} ;A5={10x20} ;A6={20x25} ;

結(jié)果為:((A1(A2A3))((A4A5)A6))  最小的乘次為15125。

原問題為n個矩陣連乘,將原問題分解為子問題,即當(dāng)n等于1,2,3.....時。
n==1時,單一矩陣,不需要計算。最小乘次為0
n==2時,根據(jù)n==1時的結(jié)果,遍歷計算出每相鄰兩個矩陣的最小乘次
n==3時,根據(jù)n==1和n==2時的結(jié)果,此時已經(jīng)求出每相鄰1個、2個矩陣的最小乘次,遍歷計算出該相鄰三個矩陣的最小乘次
依次類推……
當(dāng)n==n時,根據(jù)n==1、2、……n-1時的結(jié)果,此時已經(jīng)求出每相鄰1個、2個、3個……n-1個矩陣的最小乘次,由此求出n==n時的最小乘次

每當(dāng)n增加1時,就利用已求出的子結(jié)構(gòu)來求解此時的最優(yōu)值。

數(shù)學(xué)描述如下:

設(shè)矩陣Ai的維數(shù)為Pi × Pi+1。
設(shè)A[i:j]為矩陣AiAi+1....Aj的連乘積,即從Ai到Aj的連乘積,其中,0 <= i <= j <= n-1
設(shè)m[i][j]為計算A[i:j]的最小乘次,所以原問題的最優(yōu)值為m[0][n-1]。
當(dāng) i==j 時,單一矩陣,無需計算。m[i][i]=0,i=0,1,....n-1
當(dāng) i < j 時,利用最優(yōu)子結(jié)構(gòu),計算m[i][j]。即尋找斷開位置k(i <= k < j),使得m[i][k]+m[k+1][j]+Pi*Pk+1*Pj+1最小。

該算法的python實(shí)現(xiàn):

# coding=gbk
# 矩陣連乘問題
__author__ = 'ice'
# row_num 每個矩陣的行數(shù)
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):
    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
  if j - i > 1:
    print(str(i + 1) + '~' + str(j + 1), end=': ')
    print(str(i + 1) + ":" + str(flag[i][j] + 1), end=',')
    print(str(flag[i][j] + 2) + ":" + str(j + 1))
  traceback(i, flag[i][j], flag)
  traceback(flag[i][j] + 1, j, flag)
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)
# 1~6: 1:3,4:6
# 1~3: 1:1,2:3
# 4~6: 4:5,6:6
# 15125

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python讓列表倒序輸出的實(shí)例

    python讓列表倒序輸出的實(shí)例

    今天小編就為大家分享一篇python讓列表倒序輸出的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python array中關(guān)于[a,b,c]的使用方式

    python array中關(guān)于[a,b,c]的使用方式

    這篇文章主要介紹了python array中關(guān)于[a,b,c]的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python分分鐘繪制精美地圖海報

    python分分鐘繪制精美地圖海報

    基于Python中諸如matplotlib等功能豐富、自由度極高的繪圖庫,我們可以完成各種極富藝術(shù)感的可視化作品,關(guān)于這一點(diǎn)我在系列文章在模仿中精進(jìn)數(shù)據(jù)可視化中已經(jīng)帶大家學(xué)習(xí)過很多案例了
    2022-02-02
  • Python?Tornado?框架使用終極指南

    Python?Tornado?框架使用終極指南

    這篇文章主要為大家介紹了Python?Tornado?框架使用終極指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python中垃圾回收和del語句詳解

    Python中垃圾回收和del語句詳解

    Python語言默認(rèn)采用的垃圾收集機(jī)制是引用計數(shù)法,本文詳細(xì)的介紹了Python中垃圾回收和del語句詳解,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Python中使用socks5設(shè)置全局代理的方法示例

    Python中使用socks5設(shè)置全局代理的方法示例

    這篇文章主要介紹了Python中使用socks5設(shè)置全局代理的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python實(shí)用秘技之快速優(yōu)化導(dǎo)包順序詳解

    Python實(shí)用秘技之快速優(yōu)化導(dǎo)包順序詳解

    這篇文章主要來和大家分享一個Python中的實(shí)用秘技,那就是如何快速優(yōu)化導(dǎo)包順序,文中的示例代碼簡潔易懂,快跟隨小編一起學(xué)習(xí)起來吧
    2023-06-06
  • Python開發(fā)之Nginx+uWSGI+virtualenv多項目部署教程

    Python開發(fā)之Nginx+uWSGI+virtualenv多項目部署教程

    這篇文章主要介紹了Python系列之-Nginx+uWSGI+virtualenv多項目部署教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 使用python檢查yaml配置文件是否符合要求

    使用python檢查yaml配置文件是否符合要求

    這篇文章主要介紹了使用python檢查yaml配置文件是否符合要求,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 5個Python殺手級的自動化腳本分享

    5個Python殺手級的自動化腳本分享

    Python是一種功能強(qiáng)大的語言,廣泛用于自動執(zhí)行各種任務(wù),只要想通過自動化日常任務(wù)來節(jié)省時間的人,Python?都能滿足您的需求。本文整理了5個Python腳本,希望對大家有所幫助
    2023-01-01

最新評論

淳安县| 分宜县| 华阴市| 霍林郭勒市| 茂名市| 洪雅县| 吉木萨尔县| 瓮安县| 中卫市| 葵青区| 河东区| 霞浦县| 进贤县| 瑞安市| 股票| 台北市| 北京市| 河东区| 乐至县| 新营市| 轮台县| 花莲市| 原阳县| 响水县| 客服| 白朗县| 米易县| 常山县| 龙胜| 宜春市| 曲周县| 沙河市| 郯城县| 青龙| 乐陵市| 延长县| 绥中县| 福贡县| 庆云县| 江门市| 黔东|