일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- 연결요소
- 전공자따라잡기
- 포스트오더
- 자바
- 이진트리
- 웹개발
- 9093
- JAVA_HOME
- n진법게임
- 인오더
- BFS
- DynamicProgramming
- 링킹
- dfs
- 1707
- Bottom Up
- 포화이진트리
- 알고리즘
- 이분그래프
- 동적계획법
- 완전이진트리
- 그래프
- 11724
- 바인딩
- 피보나치
- Java
- 백준
- 순회
- 도커
- Today
- Total
물음표 살인마
[그래프] 그래프 알고리즘 기초 본문
그래프
그래프: 정점(Node, Vertex)과 간선(Edge)으로 나타내는 자료구조의 한 종류
그래프 알고리즘의 포인트: "어떠한 문제 상황을 어떻게 그래프로 만들어낼 것인가"
경로(Path): 정점 A에서 B로 가는 경로
사이클(Cycle): 정점 A에서 다시 A로 돌아오는 경로
단순 경로/단순 사이클
같은 정점을 두 번 이상 방문하지 않는 경로/사이클
특별한 언급이 없다면, 일반적으로 말하는 경로/사이클은 단순 경로/사이클이다.
그래프의 종류
- 방향이 있는 그래프
- 방향이 없는 그래프(양방향 그래프)
알고리즘 상에서 방향이 없는 그래프는 모두 방향이 있는 그래프로 바꿔서 저장해야한다.
- 간선이 여러개인 경우'
일반적으로 잘 없는 경우이지만, 필요한 간선을 제외하고 삭제하면 된다.
ex) 최단 거리를 구하는 경우 가중치가 짧은 것 빼고 긴 것은 삭제하면 됨.
- 루프: 자기 자신으로 돌아오는 간선
- 가중치: 가중치가 없는 경우 1로 계산하면 된다.
- 차수(Degree): 정점과 연결되어 있는 간선의 개수
In-degree/Out-dgree 를 이용해 sns 팔로우, 지하철 노선 등을 표현한다
그래프의 표현
그래프의 저장 방법으론 크게 1. 인접행렬 2. 인접리스트가 있다.
1. 인접행렬
정점의 개수가 V인 경우, V X V 크기의 이차원 배열을 이용한다
A[i][j] = 간선이 없는 경우 0, 있는 경우 1(혹은 가중치)
공간복잡도: O(V^2)
시간복잡도: O(V)
2. 인접리스트
크기를 동적으로 변경할 수 있는 리스트를 사용해 구현한다.
- 가중치가 없는 경우
연결된 노드를 저장
A[1] 2 5
A[2] 1 3 4 5
A[3] 2 4
-가중치가 있는 경우
연결된 노드와 가중치를 저장
A[1] (2, 2) (5, 7)
A[2] (1, 2) (3, 2) (4, 3)
A[3] (2, 2) (4, 1)
공간복잡도: O(E)
시간복잡도: O(차수)
그래프에서의 효율이란 한 정점 X와 연결된 간선을 효율적으로 찾는 방법
인접 행렬에 비해 인접 리스트의 효율이 좋기 때문에 보통 인접 리스트를 활용한다.
인접 행렬이 뛰어난 유일한 경우는 두 정점 사이에 간선이 있는지 없는 지 구하는 경우.
그 외 표현방법으로 간선리스트가 있는데,
1. 라이브러리를 사용하지 못하는 환경에서
2. Linked List를 구현하기 싫은 경우
사용한다.
'개발지식 > Algorithm' 카테고리의 다른 글
[백준1260] DFS와 BFS 문제를 통해 그래프 탐색 이해하기 (0) | 2023.01.10 |
---|---|
[백준13023] ABCDE - 그래프 표현 연습 (0) | 2023.01.07 |
[백준 1978, 1929, 6588] 소수에 대하여 (0) | 2022.09.13 |
[백준10845] 큐(queue)란? 자바로 큐 구현하기 (0) | 2022.08.22 |
[백준9093] 단어뒤집기 세가지 방법으로 풀어보기 (0) | 2022.08.16 |