資料結構學習(C++)——圖(總結) (轉)

worldblog發表於2007-08-16
資料結構學習(C++)——圖(總結) (轉)[@more@]

以上就是現在的教科書裡面,圖的全部內容了。寫完之後,茫茫然,不知道學完之後有什麼用……就像我在開篇寫的,圖的應用太廣泛了,以至於現在覺得圖“沒什麼用”——很奇怪的邏輯,只有仔細體味才能覺察到寫教科書的人的無奈。

不同於前面的連結串列和樹,在圖這裡,儲存方法不是重點,我們更多的注意力放在了演算法上。我在寫的時候,也儘量做到了演算法和儲存方法無關。然而演算法實際上就是現實問題的抽象,如果我們的常識所不及,我們也就沒有辦法來介紹演算法,反過來說,幾乎遇不到的問題,我們也不會對它的演算法感興趣。

因此,在圖的演算法裡面,由鋪設管道引出了最小生成樹,由提高通訊、交通可靠性引出了關節點和重連通分量,由地圖尋徑引出了最短路徑,由工程預算引出了關鍵路徑。這些恐怕是我們能夠理解的全部了,如果再來一個電氣網路計算,沒點物理知識恐怕是要完。

但即使這樣,上面的各個演算法仍然離我們很遠,我們大多數人恐怕永遠都不會知道管道是怎麼鋪的。我想,這裡面除了最短路徑能引起大多數人的興趣之外,其他的就只能走馬觀花的看看罷了。這也使得圖的學習很像“聾子的耳朵”,真正接觸到圖的用途的人不多,並且即使用到圖,也僅僅是個別的演算法。

正像資料結構教學的通病一樣,學無所用常常導致學無所成,前面的連結串列、樹好歹還能做點什麼東西出來,到了圖這裡,除了做個導遊,我們也做不出別的什麼了。寫到這裡很無奈,但我也只能是無奈……

那麼,學完了圖,我們應該掌握什麼呢,是上面零散的演算法嗎?我的看法是,不是。我覺得我們更應該知道那些演算法是怎麼“創造”出來的,如果遇到了類似的問題,能不能“派生”出新的演算法。因此,我覺得《資料結構演算法與應用-C++語言描述》這本書,將圖的最小生成樹、最短路徑、拓撲排序演算法放到了貪婪演算法裡講解,是一種更為合理的安排。

最後對在學習圖時像我一樣茫然的人深表同情。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-962169/,如需轉載,請註明出處,否則將追究法律責任。

相關文章