에이블 스쿨에서 진행하는 미니프로젝트가 끝나고 다시 시작하는 알고리즘 스터디. 밀린 만큼 더 힘내서 하자 화이팅!
목차
1. 그래프의 표현
2. 유니온 파인드 (Union-Find)
3. 위상 정렬 (Topological sort)
4. 다익스트라 (Dijkstra)
출처
Do it! 알고리즘 코딩테스트 with Python
1. 그래프의 표현
1.1 에지 리스트
출발 노드, 도착 노드를 저장하여 에지를 표현 (혹은 가중치도 추가)
가중치 없는 그래프의 에지 리스트
가중치 있는 그래프의 에지 리스트
1.2 인접 행렬
2차원 배열을 자료구조로 이용하여 그래프를 표현 (노드가 5개인 그래프는 5x5)
가중치 없는 그래프의 인접 행렬
가중치 있는 그래프의 인접 행렬
1.3 인접 리스트
행렬 관련 문제는 전부 인접 리스트를 사용할 수 있다 (매우 중요함)
가중치 없는 그래프 인접 리스트
3->4 노드의 경우 A[3].add(4) 와 같이 저장
가중치 있는 그래프 인접 리스트
3->4 노드의 경우 A[3].add(NewNode(4,3)) 와 같이 저장
인접 리스트는 그래프 구현은 복잡하지만 노드와 연결되어 있는 에지를 탐색하는 시간이 매우 뛰어나고 매모리 초과도 발생하지 않음.(공간 효율이 좋기 때문)
따라서 인접 리스트를 활용한 그래프 구현에 익숙해져야 함.
2. 유니온 파인드
여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union 연산
두 노드가 같은 집합에 속해 있는지를 확인하는 find 연산 (자신의 대표노드를 찾아줌)
경로 압축 : 실제 그래프에서 여러 노드를 거쳐야 하는 경로에서 그래프를 변형해 더 짧은 경로로 갈 수 있도록 함으로써 시간 복잡도를 효과적으로 줄이는 방법
3. 위상 정렬
사이클이 없는 방향 그래프에서 노드 순서를 찾는 알고리즘
시간 복잡도 : O(V+E)
따라서 위상 정렬 배열은 1 2 3 4 5 이다.
4. 다익스트라
그래프에서 최단 거리를 구하는 알고리즘
출발 노드와 모든 노드간의 최단거리 탐색
에지는 모두 양수
시간 복잡도 : O(ElogV)
'파이썬 코딩테스트' 카테고리의 다른 글
알고리즘 스터디 14일차 (0) | 2023.08.28 |
---|---|
알고리즘 스터디 9일차 (0) | 2023.08.23 |
알고리즘 스터디 7일차 (0) | 2023.08.20 |
알고리즘 스터디 6일차 (0) | 2023.08.20 |
알고리즘 스터디 5일차 (0) | 2023.08.20 |