[データ構造]グラフ
を選択します。
これまで見られたツリー構造の特性は,ルートがあり,サブノードがあり,親ノードとサブノードを接続するedgeが存在し,親ノードから子ノードに方向が流れる.また、入口は1つであり、出口は2つ(または複数)の構造である.
グラフィック(Graph)は上記の構造ではなく、方向がなく、入口の個数もなく、サブノードもなく、他にも様々な構造があります.ツリーはグラフの形式と見なすことができます.(複数条件のある方向図)
グラフィック構造はG=(V,E)で表すことができる.
G : Graph
V:Vertex set(ツリーではNodeと呼ぶ)
E : Edge set
上記構成がある場合
V = { 1, 2, 3, 4, 5, 6 }
E = { (1,2) , (2,3) , (1,5) , (3,4), (6,4), (2,1) ... }
|V|=n(Vセットの大きさ)
|E|=m(Eセットのサイズ)
使えます.
グラフィック構造は上から下への階層構造ではないため、グラフィック構造の度合いは隣接するエッジの数であり、グラフィックの度合いは最も大きい値である.(4度:3)
隣接はノード3とノード2の隣接である.
E(2,3)入射ノード2,3.
パス(path):1から3までのパス?
循環構造:始点と終点が同じ場合
図形の方向
グラフィック表示
表示図形は隣接性を表す.
欠点:情報の表現に比べて無駄なメモリ(0個)が多すぎて効率が悪い.
順番を問わずlinklistで表現する方法.
隣接リストメソッドを使用する場合,ノードの個数はedge個数の2倍である.△無方向は双方向だから.
グラフループ
DFS ( Depth - First Search )
Binary treeツアーで使用されるin、pre、postOrderはDFSに属します.
サブノードにアクセスすると、そのノードのサブノードを最後に検索し、次のブランチの場所に移動できます.
出典:ウィキペディア
BFS ( Breadth - First Search )
レベル単位で巡回しているのはBFSです.
出典:ウィキペディア
DFS、BFS-Python実施
class Graph:
def __init__(self):
self.graph = {}
def addInfo(self,start,edges):
self.graph[start] = edges
def addEdge(self,start,edge):
self.graph[start].append(edge)
def addVertex(self,Vertex):
self.graph[Vertex] = []
## BFS는 Queue구조로 구현가능하다.
def BFS(self,start):
Q = [start]
visited = [start]
while Q:
cur_V = Q.pop(0)
for next in self.graph[cur_V]:
if next not in visited:
Q.append(next)
visited.append(next)
return visited
## DFS는 스택과 재귀로 구현가능하다.
def DFS(self,start):
S = [start]
visited = []
while S:
cur_V = S.pop()
if cur_V not in visited:
visited.append(cur_V)
S.extend(self.graph[cur_V][::-1])
return visited
def DFS_recursive(self,start,visited=[]):
visited.append(start)
for next in self.graph[start]:
if next not in visited:
self.DFS_recursive(next,visited)
return visited
if __name__=="__main__":
G = Graph()
G.addInfo('A',['C','D','E'])
G.addInfo('B',['F','C'])
G.addInfo('C',['A','B'])
G.addInfo('D',['A','F'])
G.addInfo('E',['A'])
G.addInfo('F',['D','B'])
print(G.BFS('A'))
print(G.DFS('A'))
print(G.DFS_recursive('A'))
Reference
この問題について([データ構造]グラフ), 我々は、より多くの情報をここで見つけました https://velog.io/@khs0415p/자료구조-그래프テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol