1.圖的屬性和分類
本部分圖的內容,面試的時候應該根據被面試公司的情況看是否需要準備更多內容,文末有相關學習鏈接
圖的屬性
Graph(V, E):圖是點和邊的集合構成的
- V -vertex:點
- 度:入度和出度
- 點與點之間:連通與否
- E - edge:邊
- 有向和無向(單行線)
- 權重(邊長)
圖的表示和分類
圖的表示方法有兩種,分別是:
- 鄰接矩陣:
- 有相鄰的邊加權重,沒有的話如果有邊加1,沒有邊的化加 0
- 如果是有向圖的話,其鄰接矩陣是對稱矩陣
- 鄰接表:
- 用鏈表來存儲和點相連的點的信息,鏈表最後一個元素爲None, 用 / 表示
圖的分類
無向無權圖
有向無權圖
無向有權圖
有向有權圖
2.基於圖相關的算法
DFS代碼------遞歸寫法
visited visited visited =set() set() set() set() # 和樹中的 DFS 最大的區別
visited = set() # 用來記錄訪問過的點
def dfs(node,visited):
if node in visited: # terminator
# already visited
return
visited.add(node)
# proces current node here
...
for next_node in node.children():
if not next_node in visited:
dfs(next_node,visited)
BFS 代碼
visited visited visited =set() set() set() set() # 和樹中的 BFS 最大的區別
def BFS(graph,start,end):
queue = []
queue.append([start])
visited = set() # 和樹中 BFS 的最大區別
while queue:
node = queue.pop()
visited.add(node)
process(node)
nodes = generate_related_nodes(node)
queue.push(nodes)
圖的高級算法
1.連通圖的個數
2.拓撲排序
3.最短路徑(Dijkstra)
4.最小生成樹