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

C語(yǔ)言矩陣連乘 (動(dòng)態(tài)規(guī)劃)詳解

 更新時(shí)間:2017年05月22日 10:43:41   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言矩陣連乘 (動(dòng)態(tài)規(guī)劃)詳解的相關(guān)資料,需要的朋友可以參考下

動(dòng)態(tài)規(guī)劃法

題目描述:給定n個(gè)矩陣{A1,A2....An},其中Ai與Ai+1是可以相乘的,判斷這n個(gè)矩陣通過(guò)加括號(hào)的方式相乘,使得相乘的次數(shù)最少!

以矩陣鏈ABCD為例

按照矩陣鏈長(zhǎng)度遞增計(jì)算最優(yōu)值

矩陣鏈長(zhǎng)度為1時(shí),分別計(jì)算出矩陣鏈A、B、C、D的最優(yōu)值
矩陣鏈長(zhǎng)度為2時(shí),分別計(jì)算出矩陣鏈AB、BC、CD的最優(yōu)值
矩陣鏈長(zhǎng)度為3時(shí),分別計(jì)算出矩陣鏈ABC、BCD的最優(yōu)值
矩陣鏈長(zhǎng)度為4時(shí),計(jì)算出矩陣鏈ABCD的最優(yōu)值

動(dòng)歸方程:

分析:

k為矩陣鏈斷開(kāi)的位置
d數(shù)組存放矩陣鏈計(jì)算的最優(yōu)值,d[i][j]是以第i個(gè)矩陣為首,第j個(gè)矩陣為尾的矩陣鏈的最優(yōu)值,i > 0
m數(shù)組內(nèi)存放矩陣鏈的行列信息,m[i-1]和m[i]分別為第i個(gè)矩陣的行和列(i = 1、2、3...)

c語(yǔ)言實(shí)現(xiàn)代碼:

#include <stdio.h>
#define N 20 
void MatrixChain(int p[N],int n,int m[N][N],int s[N][N]){ 
  int i,j,t,k;   
  int r;             //記錄相乘的矩陣個(gè)數(shù)變量 
  for(i=1;i<=n;i++){ 
    m[i][i]=0;         //當(dāng)一個(gè)矩陣相乘時(shí),相乘次數(shù)為 0  
  }   
  //矩陣個(gè)數(shù)從兩個(gè)開(kāi)始一次遞增  
  for(r=2;r<=n;r++){ 
    //從某個(gè)矩陣開(kāi)始     
    for(i=1;i<=n-r+1;i++){ 
      //到某個(gè)矩陣的結(jié)束  
      j=i+r-1; 
      //拿到從 i 到 j 矩陣連乘的次數(shù)  
      m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; 
      //拿到矩陣連乘斷開(kāi)的位置  
      s[i][j]=i; 
      //尋找加括號(hào)不同,矩陣連乘次數(shù)的最小值,修改 m 數(shù)組,和斷開(kāi)的位置 s 數(shù)組  
      for(k=i+1;k<j;k++){ 
        t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; 
        if(t<m[i][j]){ 
          m[i][j]=t; 
          s[i][j]=k; 
        } 
      } 
    } 
  }  
} 
 
int main(void){ 
  int n,n1,m1,i,j=2; 
  int p[N]={0};          //存儲(chǔ)矩陣的行和列數(shù)組  
  int m[N][N]={0};        //存儲(chǔ)矩陣與矩陣相乘的最小次數(shù) 
  int s[N][N]={0};        //存儲(chǔ)矩陣與矩陣相乘斷開(kāi)的位置  
  printf("請(qǐng)輸入矩陣個(gè)數(shù):\n"); 
  scanf("%d",&n); 
  for(i=1;i<=n;i++){ 
    printf("請(qǐng)輸入第%d個(gè)矩陣的行和列(n1*m1 格式):",i); 
    scanf("%d*%d",&n1,&m1); 
    if(i==1){ 
      p[0]=n1; 
      p[1]=m1; 
    } 
    else{ 
      p[j++]=m1; 
    } 
  } 
  printf("\n記錄矩陣行和列:\n"); 
  for(i=0;i<=n;i++){ 
    printf("%d ",p[i]); 
  } 
  printf("\n"); 
  MatrixChain(p,n,m,s); 
  printf("\n矩陣相乘的最小次數(shù)矩陣為:\n"); 
  for(i=1;i<=n;i++){ 
    for(j=1;j<=n;j++){ 
      printf("%d  ",m[i][j]); 
    } 
    printf("\n"); 
  } 
  printf("\n矩陣相乘斷開(kāi)的位置矩陣為:\n"); 
  for(i=1;i<=n;i++){ 
    for(j=1;j<=n;j++){ 
      printf("%d ",s[i][j]); 
    } 
    printf("\n"); 
  } 
  printf("矩陣最小相乘次數(shù)為:%d\n",m[1][n]); 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++17使用std::optional表示可能存在的值

    C++17使用std::optional表示可能存在的值

    本文主要介紹了C++17使用std::optional表示可能存在的值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++詳解如何實(shí)現(xiàn)單鏈表

    C++詳解如何實(shí)現(xiàn)單鏈表

    線性表的鏈?zhǔn)酱鎯?chǔ)又稱為單鏈表,它是指通過(guò)一組任意的存儲(chǔ)單元來(lái)存儲(chǔ)線性表中的數(shù)據(jù)元素。本文將用C++實(shí)現(xiàn)單鏈表,需要的可以參考一下
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)彈跳小球項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)彈跳小球項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)彈跳小球項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 優(yōu)先隊(duì)列(priority_queue)的C語(yǔ)言實(shí)現(xiàn)代碼

    優(yōu)先隊(duì)列(priority_queue)的C語(yǔ)言實(shí)現(xiàn)代碼

    本文簡(jiǎn)要介紹一種基于數(shù)組二叉堆實(shí)現(xiàn)的優(yōu)先隊(duì)列,定義的數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)的函數(shù)接口說(shuō)明如下
    2013-10-10
  • C++實(shí)現(xiàn)LeetCode(174.地牢游戲)

    C++實(shí)現(xiàn)LeetCode(174.地牢游戲)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(174.地牢游戲),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別

    詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別

    這篇文章主要介紹了詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 詳解C語(yǔ)言內(nèi)核字符串拷貝與比較

    詳解C語(yǔ)言內(nèi)核字符串拷貝與比較

    本文將探索一下字符串的拷貝與比較,與應(yīng)用層不同內(nèi)核字符串拷貝與比較也需要使用內(nèi)核專用的API函數(shù),字符串的拷貝往往伴隨有內(nèi)核內(nèi)存分配,我們將首先簡(jiǎn)單介紹內(nèi)核如何分配堆空間,然后再以此為契機(jī)簡(jiǎn)介字符串的拷貝與比較
    2022-09-09
  • C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)

    本文給大家分享的是使用C++實(shí)現(xiàn)的簡(jiǎn)單的學(xué)生管理系統(tǒng)的代碼,主要是通過(guò)鏈表來(lái)實(shí)現(xiàn),非常簡(jiǎn)潔,有需要的小伙伴可以參考下。
    2015-07-07
  • C語(yǔ)言中strlen() strcpy() strcat() strcmp()函數(shù)的實(shí)現(xiàn)方法

    C語(yǔ)言中strlen() strcpy() strcat() strcmp()函數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了C語(yǔ)言中strlen() strcpy() strcat() strcmp()函數(shù)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-08-08
  • C語(yǔ)言簡(jiǎn)明講解預(yù)編譯的使用

    C語(yǔ)言簡(jiǎn)明講解預(yù)編譯的使用

    在C語(yǔ)言的程序中包括各種以符號(hào)#開(kāi)頭的編譯指令,這些指令稱為預(yù)處理命令。預(yù)處理命令屬于C語(yǔ)言編譯器,而不是C語(yǔ)言的組成部分,通過(guò)預(yù)處理命令可擴(kuò)展C語(yǔ)言程序設(shè)計(jì)的環(huán)境
    2022-05-05

最新評(píng)論

东辽县| 新乡县| 漳平市| 大城县| 遂宁市| 江达县| 昆明市| 双流县| 资中县| 安福县| 承德市| 二连浩特市| 蓬莱市| 普陀区| 邵武市| 冀州市| 万盛区| 琼结县| 横峰县| 宜都市| 团风县| 英山县| 奉化市| 崇仁县| 油尖旺区| 准格尔旗| 盖州市| 林州市| 英山县| 桦川县| 上高县| 宜良县| 永嘉县| 苍溪县| 崇礼县| 花莲县| 城固县| 六枝特区| 安溪县| 西畴县| 鲜城|