우기의 알 블로그 저자 한승욱이라고 합니다.
스스로 알을 깨고 나오는 새처럼
언젠가 알을 깨고 온전한 나 자신이 되었을 때, 그때를 기다리며 제 속에서 솟아 나오는 것을 글로써 표현하고자 합니다.
'개발 기술블로그'를 위주로 저 한승욱의 다양한 관심사, 생각, 철학 등을 포스팅합니다.
비선형 구조는 표현에 초점이 맞춰져 있다고 말씀 드렸는데,
선형구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고,
비선형구조는 표현에 초점이 맞춰져 있습니다.
이번 자료구조인 그래프는 바로 연결 관계에 초점이 맞춰져 있습니다.
# 출처: 스파르타코딩클럽
예를 들면 SNS의 관계 같은 경우가 그래프 구조일 것
💡
노드(Node): 연결 관계를 가진 각 데이터를 의미합니다. 정점(Vertex)이라고도 합니다.
간선(Edge): 노드 간의 관계를 표시한 선.
인접 노드(Adjacent Node): 간선으로 직접 연결된 노드(또는 정점)
# 출처: 스파르타코딩클럽
그래프는 원래 무방향 그래프 와 유방향 그래프 가 있지만 이번 수업에서는 무방향만 다룸.
💡
유방향 그래프(Directed Graph): 방향이 있는 간선을 갖습니다. 간선은 단방향 관계를 나타내며, 각 간선은 한 방향으로만 진행할 수
있습니다.
무방향 그래프(Undirected Graph)는 방향이 없는 간선을 갖습니다
그래프의 표현 방법
그래프를 컴퓨터에서 표현하는 방법 두 가지
인접 행렬(Adjacency Matrix): 2차원 배열로 그래프의 연결 관계를 표현
인접 리스트(Adjacency List): 링크드 리스트로 그래프의 연결 관계를 표현
2-3
⎜
0-11. 이를 인접 행렬,2차원 배열로 나타내면 다음과 같습니다!
01230 X O X X
1 O X O X
2 X O X O
3 X X O X
이걸 배열로 표현하면 다음과 같습니다!
graph =[[False,True,False,False],[True,False,True,False],[False,True,False,True],[False,False,True,False]]2. 이번에는 인접 리스트로 표현해보겠습니다!
인접 리스트는 모든 노드에 연결된 노드에 대한 정보를 차례대로 다음과 같이 저장합니다.0->11->0->22->1->33->2
이를 딕셔너리로 표현하면 다음과 같습니다!
graph ={0:[1],1:[0,2]2:[1,3]3:[2]}# 출처: 스파르타코딩클럽
위 두방식의 차이는 무엇일까?
💡
바로 시간 VS 공간!!
인접 행렬으로 표현하면 즉각적으로 0과 1이 연결되었는지 여부를 바로 알 수 있습니다.
그러나, 모든 조합의 연결 여부를 저장해야 되기 때문에 O(노드2) 만큼의
공간을 사용해야 합니다.
인접 리스트로 표현하면 즉각적으로 연결되었는지 알 수 없고, 각 리스트를 돌아봐야 합니다.
따라서 연결되었는지 여부를 알기 위해서 최대 O(간선) 만큼의
시간을 사용해야 합니다.
대신 모든 조합의 연결 여부를 저장할 필요가 없으니 O(노드+간선) 만큼의
공간을 사용하면 됩니다.
# 출처: 스파르타 코딩클럽
알고리즘 4주차 - 그래프
그래프
무방향 그래프
와유방향 그래프
가 있지만 이번 수업에서는 무방향만 다룸.그래프의 표현 방법
'기술개발 > Algorithm' 카테고리의 다른 글