[英]Questions regarding Implementation of graph in c++
我正在學習用C ++實現圖形,因此我閱讀了Wikipedia條目 ,發現有兩種常用的方法: 鄰接表和鄰接矩陣 。 我了解鄰接列表和鄰接矩陣之間在空間上的權衡。
我有三個問題
1)除了上面列出的兩種以外,還有其他方法可以實現該圖嗎?
2)使用不同的數據結構之間有什么區別? 鏈表VS向量VS映射
3)下一段在文章中是什么意思
鄰接表和鄰接矩陣之間的另一個重要區別是它們執行的操作效率。 在鄰接表中,每個頂點的鄰居可以按與頂點度成比例的時間有效地列出。 在鄰接矩陣中,此操作所花費的時間與圖中的頂點數量成正比,而該數量可能遠高於度。 另一方面,鄰接矩陣可以測試兩個頂點是否在恆定時間內彼此相鄰; 鄰接表較慢以支持此操作。
efficiency of the operations they perform
指的是什么? 什么類型的操作???
two vertices are adjacent to each other in constant time
意味着什么?知道兩個頂點是否彼此相鄰有什么實際用途?
listS
消耗更多的內存,並且不是隨機訪問的,但是元素的句柄(迭代器)在插入和刪除時仍然有效; vectorS
是內存有效的隨機訪問,但是無效句柄(迭代器)在插入和刪除時會失效; mapS
通常會消耗更多的內存,而不要迭代太慢,句柄(迭代器)通常在插入和刪除時仍然有效; 查找子節點可以非常快。 這實際上是這些容器之間的一般區別,並非特定於圖形。 two vertices are adjacent to each other
僅表示兩個節點之間存在直接邊緣。 以恆定的時間執行此操作意味着該操作與每個節點具有多少個鄰居無關。 按照實際目的去做:是的,很多。 您可能想知道一個城市是否通過直達街道與另一個城市相連。 在折疊等之前,您可能想知道兩個頂點是否具有邊。
在您談論C ++時,我強烈建議您看一下Boost.Graph或Lemon等一些好的圖形庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.