20172311《程序設計與數據結構》第九周學習總結

20172311《程序設計與數據結構》第九周學習總結

教材學習內容總結

第十五章 圖

  • 容許樹的每一個結點連通多個其餘結點,再也不有父親、孩子之說,那麼就獲得了圖的概念。
  • 無向圖
  • 無向圖是一種邊爲無序結點對的圖
  • 若是圖中的兩個頂點之間有一條連通邊,則稱兩個頂點是鄰接的
  • 連通一個頂點及其自身的邊稱爲自循環
  • 對有n個頂點的無向圖,要使該圖爲徹底的,要有n(n-1)/2條邊(此處假設沒有自循環)
  • 路徑長度是該路徑中邊的條數
  • 若是無向圖中任意兩個頂點之間都存在一條路徑,則認爲這個無向圖是連通的
  • 環路是一種首末頂點相同且沒有重邊的路徑
  • 有向圖
  • 有向圖是一種邊爲有序頂點對的圖
  • 網絡
  • 網絡是一種每條邊都帶有權重或代價的圖
  • 網絡能夠是無向的也能夠是有向的
  • 經常使用的圖算法
  • 圖的遍歷主要分爲廣度優先遍歷和深度優先遍歷
  • 廣度優先遍歷可以使用一個 隊列和無序列表實現,深度優先遍歷可以使用一個棧和無序列表實現
  • 廣度優先遍歷棧和隊列變化過程

1.示例從9開始遍歷
html

2.遍歷過程當中棧和隊列的變化過程
node

  • 測試連通性方法:在一個含n個頂點的圖中,當且僅當對每一個頂點v,從v開始的廣度優先遍歷的resultList大小都是n(即廣度優先便利中的頂點數目等於圖中頂點數目)時,該圖時連通的
  • 最小生成樹是相對於網絡而言,其邊的權重總和小魚或等於同一個圖中其餘任何一顆生成樹的權重總和
  • 生成最小生成樹過程當中最小堆和生成樹的變化過程

1.示例從5開始生成最小生成樹
git

2.生成過程當中最小堆和生成樹的變化過程
算法

  • 斷定最短路徑一種是判斷兩頂點間的最小邊數,另外一種是尋找加權圖的最便宜路徑
  • 可經過鄰接列表和鄰接矩陣的方法實現圖

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

  • 問題1:深度優先遍歷無序列表和棧的變化過程是怎樣的?
  • 問題1解決方案:經過與同窗討論得出以下總結:

1.深度優先遍歷的算法表述以下:數組

1.訪問初始結點v,並標記結點v爲已訪問。網絡

2.查找結點v的第一個鄰接結點w。數據結構

3.若w存在,則繼續執行4,不然算法結束。學習

4.若w未被訪問,對w進行深度優先遍歷遞歸(即把w當作另外一個v,而後進行步驟123)。測試

5.查找結點v的w鄰接結點的下一個鄰接結點,轉到步驟3。.net

2.遍歷過程分析以下:

過程分析:
(1)、首先節點 1 進棧,節點1在棧頂;

(2)、而後節點1出棧,訪問節點1,節點1的孩子節點3進棧,節點2進棧;

(3)、節點2在棧頂,而後節點2出棧,訪問節點2

(4)、節點2的孩子節點5進棧,節點4進棧

(5)、節點4在棧頂,節點4出棧,訪問節點4,

(6)、節點4左右孩子爲空,而後節點5在棧頂,節點5出棧,訪問節點5;

(7)、節點5左右孩子爲空,而後節點3在站頂,節點3出棧,訪問節點3;

(8)、節點3的孩子節點7進棧,節點6進棧

(9)、節點6在棧頂,節點6出棧,訪問節點6;

(10)、節點6的孩子爲空,這個時候節點7在棧頂,節點7出棧,訪問節點7

(11)、節點7的左右孩子爲空,此時棧爲空,遍歷結束。

  • 問題2:用鄰接列表實現圖的總體思路應該是怎樣的?
  • 問題2解決方:經過與同窗討論並查閱資料得出以下總結:

(一)無向圖鄰接表

(二)有向圖鄰接表

(三)帶權鄰接表

(四)鄰接表的數據結構

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

  • 問題1:
    用鄰接矩陣實現的圖在測試廣度優先遍歷時出現錯誤以下:

    起初我覺得是遍歷方法有錯,可是通過調試後發現是以前的鏈式隊列的enqueue方法有問題
    錯誤的enqueue方法代碼以下:
public void enqueue(T element)
    {
        LinearNode<T> node = new LinearNode<T>(element);

        if (isEmpty())
            head = node;
        else

        tail = node;
        count++;
    }

修改後的enqueue方法以下:

public void enqueue(T element)
    {
        LinearNode<T> node = new LinearNode<T>(element);

        if (isEmpty())
            head = node;
        else
            tail.setNext(node);

        tail = node;
        count++;
    }

修改後運行結果以下:

  • 問題1解決方案:

代碼託管

上週考試錯題總結

本週無錯題!

結對及互評

  • 本週結對學習狀況
    本週主要對圖進行了學習,剛開始的時候很是懵,通過對課本的深刻學習以及與同窗們的討論還有老師的指點纔算是理解了圖。同時與結對夥伴對圖的實現進行了較爲深刻的討論,收穫不少,但願繼續加油,一塊兒努力取得更大的進步!

感想

努力,努力再努力吧!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 4/4
第二週 464/464 1/2 10/14 理解掌握了用數組和鏈表實現棧的方法
第三週 494/958 1/3 10/24 理解掌握了用數組和鏈表實現隊列的方法
第四周 1629/2587 2/5 20/44 對用鏈表和數組實現列表進行了學習
第五週 856/3443 2/7 15/59 較爲深刻的學習了查找和排序方法的實現
第六週 668/4111 1/8 20/79 學習了鏈式二叉樹的實現
第七週 900/5011 1/9 15/99 對二叉查找樹進行了較爲深刻的學習
第八週 1378/6389 2/10 16/115 較爲深刻的學習理解了堆
第九周 1700/8089 1/11 12/127 圖的理解和實現
  • 計劃學習時間:16小時
  • 實際學習時間:12小時

  • 改進狀況:進一步提升學習效率,遇到問題努力去解決!

參考資料

相關文章
相關標籤/搜索