Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 트랜잭션
- SDK
- Git
- concurrency control
- 운영체제와 정보기술의 원리
- 데이터베이스
- vite
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 반효경
- B tree 데이터삽입
- 백엔드
- 코딩애플
- 쉬운코드
- Extendable hashing
- 프로세스 주소 공간
- recoverability
- 갤럭시 S24
- 온디바이스AI
- 시스템프로그래밍
- 인터럽트
- 네트워크
- 커널 동기화
- 쉬운 코드
- CPU 스케줄링
- 운영체제
- SQL
- 개발남노씨
- 김영한
- 코딩테스트 [ ALL IN ONE ]
- 시그널 핸들러
Archives
- Today
- Total
티끌모아 태산
Graph(1) 본문
728x90
그래프란
그래프(G)는 노드(정점, Vertex)들의 집합 V와 이들을 연결하는 간선(Edge)들의 집합 E로 구성된 자료구조입니다. 쉽게말해, 그래프는 노드와 간선으로 이루어진 자료구조이다.
그래프의 종류
- 무향 그래프(undirected graph): 방향이 정해져있지 않은 양방향 그래프를 의미합니다. ❗️코딩테스트에서 주로 많이 다룬다.
- 방향 그래프(directed graph): 방향이 정해져 있는 그래프로 단뱡향 그래프를 의미합니다. 즉, 아래 사진과 같이 방향이 정해진 그래프 입니다. 그래프를 살펴보면 들어오는 간선과 나가는 간선이 있는데, 들어오는 간선을 indgree라 하며, 나가는 간선을 outdgree라 합니다. 예를들어, 아래 노드 B는 노드 A와 C로 부터 들어오고 E로 나가기 때문에 indegree=2, outdegree=1 이다.
- 다중 그래프: 노드와 노드사이의 간선이 여러개인 경우를 의미한다. 즉, 들어오는 간선과 나가는 간선이 각각 1개를 초과하는 그래프
- 단순 그래프: 노드와 노드사이에 들어오는 간선과 나가는 간선이 각각 1개씩인 경우의 그래프를 의미한다. ❗️코드 테스트에서 주로 다룬다.
- 가중치 그래프: 노드와 노드를 연결하는 간선의 비용이 각각 다르다. 모든 경로의 비용이 같은 경우도 있으나 경로마다 비용이 다른 상황을 가중치가 다르다하여 이러한 그래프를 가중치 그래프라고 합니다. ❗️다익스트라 알고리즘에서 주로 사용됩니다,
그래프의 구현
- 인접 행렬: 그래프를 행(row)과 열(column)에따라, 정보들을 직사각형 모양으로 배열한 것.
matrix = [
[0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 0],
[0, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 1, 0],
]
- 인접 리스트: 딕셔너리 {} 형태로 정의됩니다. 딕셔너리는 key와 value로 정의되는 자료구조로 인접 리스트 같은 경우는 key에는 정점이 들어가고 value에는 key와 연결된 노드들의 연결 관계를 표시해 준다. ❗️코딩테스트에서 인접 행렬방식보다는 주로 인접 리스트 방식을 사용한다. why? 메모리 사용이 더 효율적
graph = {
"A": ["B"],
"B": ["A", "C", "E"],
"C": ["B", "D"],
"D": ["C", "E", "F"],
"E": ["B", "D", "F"],
"F": ["D", "E"],
}
- 암시적 그래프: ❗️코딩테스트에서 자주 다루게 될 그래프 암시적 그래프. 코딩 테스트를 풀다보면 다음과 같은 문제들을 자주 접하게 된다.
위 사진은 전혀 그래프 처럼 보이지 않지만 암시적으로 그래프 처럼 표현할 수 있습니다.
예를들어, 벽에는 '1'의 값을, 길에는 '0'의 값을 넣음으로써 구분할 수 있다. 그리고 각 영역을 좌표의 개념을 도입하여 표현할 수 있다.
graph = [
[1, 1, 1, 1, 1],
[0, 0, 0, 1, 1],
[1, 1, 0, 1, 1],
[1, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
]
위 표현 방식은, 각 노드마다의 연결 관계를 명확하게 나타내지는 않지만 암시적으로 각 노드마다 상 하 좌 우로 연결되어 있음을 알 수 있다. 따라서 가로를 row 세로를 column으로 생각함으로써 graph[row][column]를 통해 원하는 값으로 접근할 수 있습니다. 예를들어 (2,3)을 알고 싶다면 graph[2][3]을 통해 값이 '1=벽' 임을 알 수 있습니다.
728x90
'CS 지식 > 자료구조,알고리즘' 카테고리의 다른 글
배열 (0) | 2023.08.17 |
---|---|
Graph(2)-BFS/DFS (0) | 2023.08.15 |
CodingTest (0) | 2023.06.29 |