1. 程式人生 > ># 學號12 《程序設計與數據結構》第11周學習總結

# 學號12 《程序設計與數據結構》第11周學習總結

arc 軟件 進行 pri images 可能 第七周 生成 新增

教材學習內容總結

遍歷

  • 深度優先遍歷:

深度優先遍歷,從初始訪問結點出發,我們知道初始訪問結點可能有多個鄰接結點,深度優先遍歷的策略就是首先訪問第一個鄰接結點,然後再以這個被訪問的鄰接結點作為初始結點,訪問它的第一個鄰接結點。總結起來可以這樣說:每次都在訪問完當前結點後首先訪問當前結點的第一個鄰接結點。

  • 特點:這樣的訪問策略是優先往縱向挖掘深入,而不是對一個結點的所有鄰接結點進行橫向訪問。

  • 算法步驟:

1.訪問初始結點v,並標記結點v為已訪問。
2.查找結點v的第一個鄰接結點w。
3.若w存在,則繼續執行4,否則算法結束。
4.若w未被訪問,對w進行深度優先遍歷遞歸(即把w當做另一個v,然後進行步驟123)。
5.查找結點v的w鄰接結點的下一個鄰接結點,轉到步驟3。

  • 例如:其深度優先遍歷順序為 1->2->4->8->5->3->6->7

技術分享圖片

  • 廣度優先遍歷:

類似於一個分層搜索的過程,廣度優先遍歷需要使用一個隊列以保持訪問過的結點的順序,以便按這個順序來訪問這些結點的鄰接結點。

  • 算法步驟:

1.訪問初始結點v並標記結點v為已訪問。
2.結點v入隊列
3.當隊列非空時,繼續執行,否則算法結束。
4.出隊列,取得隊頭結點u。
5.查找結點u的第一個鄰接結點w。
6.若結點u的鄰接結點w不存在,則轉到步驟3;否則循環執行以下三個步驟:

1). 若結點w尚未被訪問,則訪問結點w並標記為已訪問。
2). 結點w入隊列
3). 查找結點u的繼w鄰接結點後的下一個鄰接結點w,轉到步驟6。
  • 例如:其廣度優先算法的遍歷順序為:1->2->3->4->5->6->7->8

技術分享圖片

最小生成樹:

  • Prim算法:

Prim算法是解決最小生成樹的常用算法。它采取貪心策略,從指定的頂點開始尋找最小權值的鄰接點。圖G=

  • Kruskal算法:

Kruskal算法是基於貪心的思想得到的。首先我們把所有的邊按照權值先從小到大排列,接著按照順序選取每條邊,如果這條邊的兩個端點不屬於同一集合,那麽就將它們合並,直到所有的點都屬於同一個集合為止。

教材學習中的問題和解決過程

  • 問題1:上課最後的時候對於AOE關鍵路徑計算不是很理解

  • 問題1解決方案:和同學討論並查閱相關資料: 
    首先,在AOE網中,從始點到終點具有最大路徑長度(該路徑上的各個活動所持續的時間之和)的路徑為關鍵路徑。

計算關鍵路徑,只需求出上面的四個特征屬性,然後取e(i)=l(i)的邊即為關鍵路徑上的邊。
  ? Ve(j):是指從始點開始到頂點Vj的最大路徑長度

   計算技巧:

   (1)從前向後,取大值:直接前驅結點的Ve(j)+到達邊(指向頂點的邊)的權值,有多個值的取較大者

   (2)首結點Ve(j)已知,為0

Vl(j):在不推遲整個工期的前提下,事件vj允許的最晚發生時間

   計算技巧:

   (1)從後向前,取小值:直接後繼結點的Vl(j) –發出邊(從頂點發出的邊)的權值,有多個值的取較小者;

   (2)終結點Vl(j)已知,等於它的Ve(j))

        ?  e(i): 若活動ai由弧<vk,vj>表示,則活動ai的最早開始時間應該等於事件vk的最早發生時間。因而,有:e(i)=ve(k);(即:邊(活動)的最早開始時間等於,它的發出頂點的最早發生時間) 
         ?  l(i): 若活動ai由弧<vk,vj>表示,則ai的最晚開始時間要保證事件vj的最遲發生時間不拖後。 因而有:l(i)=vl(j)-len<vk,vj>(為邊(活動)的到達頂點的最晚發生時間減去邊的權值)

## 代碼調試中的問題和解決過程

  • 問題:主要代碼問題會在下周一實驗報告體現。

錯題及總結

  • 技術分享圖片

  • 對軟件的認識太過於絕對化

代碼托管

結對及互評

討論了兩個遍歷

本周結對學習情況

  • 20162324

思考

學習還需要進一步深入

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0/0 1/1 6/6
第二、三周 403/403 2/3 14/20
第4、5周 1452/1855 2/5 8/28
第6周 231/2086 1/6 8/36
第七周 620/2706 2/8 8/44
第八周 722/3428 2/10 8/52
第九周 1022/4450 1/11 8/60
第十周 722/5172 3/14 8/68
第十一周 890/6062 1/15 8/76

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法

  • 計劃學習時間:9小時

  • 實際學習時間:8小時

  • 改進情況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)

參考資料

  • 《Java程序設計與數據結構教程(第二版)》

  • 《Java程序設計與數據結構教程(第二版)》學習指導

# 學號12 《程序設計與數據結構》第11周學習總結