728x90

☑️ To-do

  • 그래프 이론 기본 정리
  • Week03 문제 풀이
    • 1991 / 11725 / 1707 / 2178 / 1260 / 11724 / 2606 / 5639

 

 

그래프 🆚 트리

  그래프 트리
방향성 방향 그래프 혹은 무방향 그래프 방향 그래프
순환성 순환 및 비순환 비순환
루트 노드 존재 여부 루트 노드가 없음 루트 노드가 존재
노드간 관계성 부모와 자식 관계 없음 부모와 자식 관계
모델의 종류 네트워크 모델 계층 모델

 

 

 

트리(tree) 관련 용어

  • 노드(node) (=정점)
  • 엣지(edge) (=간선)
  • 루트(root) : 최상위 노드
  • 리프(leaf)
    • 단말 노드 (terminal node)
    • 외부 노드 (external node)
    • 리프를 제외한 노드 : 비단말 노드(non-terminal node = internal node)
  • 노드 간 관계 표현
    • 자식 (child)
    • 부모 (parent)
    • 형제 (sibling)
    • 조상 : 위로 가지를 따라가며 만나는 모든 노드
    • 자손 : 아래로 가지를 따라가며 만나는 모든 노드
    • 레벨 : 루트에서 얼마나 멀리 떨어져 있는지를 나타냄
  • 차수 : 각 노드가 갖는 자식의 수
  • 높이 : 루트에서 가장 멀리 있는 리프까지의 거리
  • 서브트리 : 어떤 노드를 루트로 하고 그 자손으로 구성된 트리
  • 빈 트리 : 노드와 가지가 전혀 없는 트리

 

 

 


그래프 표현 방법

 

1. 에지 리스트

  • 벨만 포드, 크루스칼
  • 에지를 중심으로 그래프 표현
    • 출발 노드 | 도착 노드
    • 출발 노드 | 도착 노드 | 가중치
  • 방향이 있는 그래프, 없는 그래프 둘 다 표현 가능
    • (방향) 1 → 2 : [1, 2]
    • (무방향) 1 ↔ 2 : [1, 2] , [2, 1] 동일
    • (가중치 - 시작, 도착, 가중치) [1, 2, 4]

 

 


2. 인접 행렬

  • $n^2$ 형태의 배열로 표현
  • 노드 개수에 비해 에지가 적을 때는 공간 효율성이 떨어짐
  • ⭐ 자바의 경우 노드 개수가 3만개를 넘으면 힙 스페이스 에러 발생!

 

  • 가중치 ❌

  • 단순히 표시 중심

 

  • 가중치 ⭕

  • 배열에 가중치 값을 함께 저장

 

 


3. 인접 리스트

  • 노드 개수만큼 배열을 선언
    • 자바에선 노드 개수만큼 ArrayList를 선언한다.
  • N번 노드와 연결되어 있는 노드를 배열의 위치 N에 연결된 노드 개수만큼 배열을 연결한다.
  • 에지 탐색 시간 및 공간 효율성이 좋다.
  • BFS, DFS

 

  • 가중치 ❌

  • 단순히 연결된 노드만 넣어준다.

 

  • 가중치 ⭕

  • 노드 연결 상태와 가중치를 넣어준다.
  • Python : tuple
  • Java : Node 선언
728x90

'🌱 Dev Diary > 📄 TIL' 카테고리의 다른 글

C 정복하기(1) - 포인터  (0) 2022.11.28
알고리즘 이론 - 이진 트리  (0) 2022.11.16
Week02 TEST  (0) 2022.11.12
알고리즘 이론 - 이분 탐색  (0) 2022.11.10
힙 구조, 스택 계산기 구현  (0) 2022.11.10