算法課 實驗6

參考文獻


實驗問題描述

一個汽車公司在有2條裝配線的工廠內(nèi)生產(chǎn)汽車,每條裝配線有n個裝配站,不同裝配線上對應(yīng)的裝配站執(zhí)行的功能相同,但是每個站執(zhí)行的時間是不同的。在裝配汽車時,為了提高速度,可以在這兩天裝配線上的裝配站中做出選擇,即可以將部分完成的汽車在任何裝配站上從一條裝配線移到另一條裝配線上。裝配過程如下圖所示:


裝配線問題

我們對這張圖來分析一下



裝配過程的時間包括:進入裝配線時間e、每裝配線上各個裝配站執(zhí)行時間a、從一條裝配線移到另外一條裝配線的時間t、離開最后一個裝配站時間x。舉個例子來說明,現(xiàn)在有2條裝配線,每條裝配線上有6個裝配站,各個時間如下圖所示:


實驗解題步驟

(1)描述通過工廠的最快結(jié)構(gòu)
  • 如果我們需要找到經(jīng)過S(i, j)的最短路徑其實我們需要先知道S(1, j-1)和S(2, j-1)的最優(yōu)解(一個問題的最優(yōu)解包含了最優(yōu)子結(jié)構(gòu)的一個最優(yōu)解)
    • 通過裝配線S1,j-1的最快線路,然后直接通過裝配站Si,j
    • 通過裝配站S2,j-1的最快線路,從裝配線2移動到裝配線1,然后通過裝配線S1,j。
(2)一個遞歸的解
  • 最終目標是確定工件通過工廠的所有路徑的最快時間,所以我們假設(shè)這個變量是f*,令fi[j]表示的是工件從起點到達S(i,j)的最快的時間。及f* = min(f1[n]+x1,f2[n]+x2)
    j = 1時:f1[1] = e1+a1[1],f2[1] = e2+a2[1] //包括經(jīng)過當(dāng)前節(jié)點的時間
    j > 1是:f1[j] = min(f1[j-1]+a1[j],f2[j-1]+t2[j-1]+a1[j]),f2[j] = min(f2[j-1]+a2[j],f1[j-1]+t1[j-1]+a2[j]) //包括經(jīng)過當(dāng)前節(jié)點的時間
(3)計算最快時間

用C語言來實現(xiàn)這個算法

//核心代碼在這個地方
//由于編程語言是從0開始計數(shù)的
void fastest_way (int aNode[][N], int tNode[][N-1], fastWay[][N-1], int eNode[][], ){
  int i, j;
  fastWay[0][0] = e[0] + a[0][0];
  f[1][0] = e[1] + a[0][1];
  l[0][0] = 1;
  l[1][0] = 2;
  if (fastWay[0][j-1] < fastWay[1][j-1] + tNode[1][j-1]) {
    fastWay[0][j] = fastWay[0][j-1] + aNode[0][j];
    l[0][j] = 1;
  }
  else {
    fastWay[0][j] = fastWay[1][j-1] + tNode[1][j-1]+ aNode[0][j];
    l[0][j] = 2
  }
  //上面一段可以寫成 fastWay[0][j] = Math.min(fastWay[0][j-1], fastWay[1][j-1] + tNode[1][j-1]) + aNode[0][j]
  if(fastWay[1][j-1] < fastWay[0][j-1] + tNode[0][j-1])
     {
         fastWay[1][j] = fastWay[1][j-1] + aNode[1][j];
         l[1][j] = 2;
     }
    else
     {
         fastWay[1][j] = fastWay[0][j-1] + tNode[0][j-1] + aNode[1][j];
         l[1][j] = 1;
     }
    //這一段也可以寫成 fastWay[1][j] = Math.min(fastWay[0][j-1] + tNode[0][j-1], fastWay[1][j-1]) + aNode[1][j],同時通過?:三元符號可以對l指針對象進行賦值
//最終條件,臨界條件
if(fastWay[0][n-1] + xNode[0] < fastWay[1][n-1] + xNode[1])
     {
         last_f = fastWay[0][n-1] + xNode[0];
         last_l = 1;
     }
     else
     {
         last_f = fastWay[1][n-1] + xNode[1];
         last_l = 2;
     }
//這樣寫更加好 Go\Python last_f, last_l = (fastWay[0][n-1] + xNode[0] < fastWay[1][n-1] + xNode[1]) ? (fastWay[0][n - 1] + xNode[0], 1):(fastWay[1][n-1]+xNode[1], 2)
 
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言前言 隨著科學(xué)技術(shù)的飛速發(fā)展和科學(xué)技術(shù)的日新月異,產(chǎn)品更新?lián)Q代的速度也越來越快,復(fù)雜零件的個數(shù)也越來越多,產(chǎn)...
    穆山閱讀 2,022評論 0 10
  • 摘要:說到BP(Back Propagation)算法,人們通常強調(diào)的是反向傳播,其實它是一個雙向算法:正向傳播輸...
    暖夏未眠丶閱讀 1,566評論 0 5
  • 成長路上的艱難險阻數(shù)不勝數(shù),但是,哪些才是決定性因素,歸根結(jié)底是人的信仰。 我的一位老師,數(shù)十年堅持研究兒童的教育...
    修彥紅閱讀 734評論 0 1
  • 今天是母親節(jié),雖然是西方人的節(jié)日但作為體現(xiàn)子女孝順又何不拿來主義一把。離母親近的可回家一次,分開兩地可打電話問候一...
    艾冰臺閱讀 317評論 0 2

友情鏈接更多精彩內(nèi)容