본문 바로가기

카테고리 없음

[JAVA]비선형 자료구조 그래프, 그래프 vs 트리, 그래프의 종류, 그래프 탐색, 그래프의 구현

그래프(Graph):

-정점과 간선으로 이루어진 자료구조(Cyclic), 연결된 정점간의 관계를 표현할 수 있는 자료구조

-그래프의 용도: 지하철 노선도, 통신 네트워크, ...

 

-그래프 용어:

Graph 예시 1: 무방향 그래프, Graph 예시 2: 방향 그래프

 

-그래프 vs 트리:

  그래프 트리
개요 노드와 간선으로 이루어진 자료구조 그래프의 한 종류
방향성 방향 그래프, 무방향 그래프 둘 다 방향 그래프
사이클 Cyclic Acyclic
모델 네트워크 모델 계층 모델
루트 노드 루트 노드 X 최상위 노드
부모-자식 X 인접한 상하위 노드
간선 수 그래프에 따라 다름 N-1개
순회 DFS, BFS Pre-,In-, Post-order/ Level-order
경로 2개 이상의 경로 가능 두 노드 간의 경로는 오직 1개

 

트리는 그래프의 한 종류이다!

 

-그래프의 종류:

1. 무방향 그래프: 간선에 방향이 없는 그래프(양방향 이동 가능)

정점 A-B 간선의 표현 : (A,B) =(B, A)

 

2. 방향 그래프: 간선에 방향이 있는 그래프(해당 방향으로만 이동 가능)

정점 A-> B 간선의 표현 : <A,B> =! <B,A>

 

(예시는 위에서)

 

-그래프 탐색 - DFS:

각 노드에 방문했는지 여부를 체크할 배열스택을 이용해 구현(선입후출)

 

-BFS:

각 노드에 방문했는지 여부를 체크할 배열과 를 이용해 구현(선입선출)

 

-그래프의 구현:

1. 인접 행렬: 

-2차원 배열 이용

-장단점:

장점: 간선 정보의 확인과 업데이트가 빠름(복잡도: O(1)) -> 바로 확인, 업데이트

단점: 인접 행렬을 위한 메모리 공간 차지

 

2. 인접 리스트:

-연결리스트 이용

-장단점:

장점: 메모리 사용량이 상대적으로 적고(인접 행렬보다), 노드의 추가, 삭제가 빠름

단점: 간석 정보 확인이 상대적으로 오래 걸림

위의 그래프 참고

 

행렬 vs 인접 리스트:

  인접 행렬 인접 리스트
특정 간선 검색 O(1) O(degree(V))
정점의 차수 계산 O(N) O(degree(V))
전체 노드 탐색 O(N^2) O(E)
메모리 N x N N + E

N: 전체 정점 개수, E: 전체 간선 개수

 

노드의 개수가 적고 간선의 수가 많을 땐 인접 행렬,

노드의 개수가 많고 간선의 수가 적을 땐 인접 리스트가 유리하다!

 


비선형 자료구조의 구현 역시 선형 자료구조의 구현이 필요하다!

내일 그래프 코드 구현을 진행할 예정인데,

그 전에 아직 학습하지 않아 이해가 되지 않는 알고리즘 복잡도 계산과

스택, 큐의 구현을 먼저 복습해야겠다.