프림 알고리즘 (Prim's Algorithm)
- 시작 정점을 선택한 후 , 정점에 인접한 간선중 최소 간선으로 연결된 정점을 선택하고, 해당 정점에서 다시 최소 간선으로 연결된 정점을 선택하는방식,
- 최소 신장 트리를 확장해가는 방식
구현
1. 임의의 정점을 선택, '연결된 노드 집합'에 삽입
2. 선택된 정점에 연결된 간선들을 간선 리스트에 삽입
3. 간선 리스트에서 최소 가중치를 가지는 간선부터 추출해서, => 최소 Heap , PriorityQueue 사용
- 해당 간선에 연결된 인접 정점이 '연결된 노드 집합'에 이미 들어 있다면, 넘어간다 (사이클 방지)
- 해당 간선에 연결된 인접 정점이 '연결된 노드 집합'에 들어 있지 않으면, 해당 간선을 선택하고, 해당 간선 정보를 최소 신장 트리에 삽입
4. 추출한 간선은 간선 리스트에서 제거
5. 간선 리스트에 더 이상의 간선이 없을 때까지 3-4번을 반복
2. 선택된 정점에 연결된 간선들을 간선 리스트에 삽입
3. 간선 리스트에서 최소 가중치를 가지는 간선부터 추출해서, => 최소 Heap , PriorityQueue 사용
- 해당 간선에 연결된 인접 정점이 '연결된 노드 집합'에 이미 들어 있다면, 넘어간다 (사이클 방지)
- 해당 간선에 연결된 인접 정점이 '연결된 노드 집합'에 들어 있지 않으면, 해당 간선을 선택하고, 해당 간선 정보를 최소 신장 트리에 삽입
4. 추출한 간선은 간선 리스트에서 제거
5. 간선 리스트에 더 이상의 간선이 없을 때까지 3-4번을 반복
• HashMap에 특정 키 존재 여부 확인 메서드
- containsKey("키")
• 찾는 키에 대한 값이 없을 떄, 디폴트 값 반환 메서드
- getOrDefault("키", default 값)
개선된 프림 알고리즘
- 간선이 아닌 노드를 중심으로 우선순위 큐를 적용하는 방식
- 가장 키 값이 적은 정점을 추출한 후 해당 정점의 인접한 정점들에 대해 키값과 연결된 가중치 값을 비교하여
키 값이 작으면 해당 정점 값을 갱신
- 우선순위큐 구조에서 이미 들어가 있는 데이터의 값 변경 시, 최소값을 가지는 데이터를 루트노드로 올려놓도록
재구성하는 기능이 필요하다.
- 다익스트라 알고리즘과 비슷한 방식
개선된 프림 알고리즘의 시간 복잡도 : O(ElogV)
이것 또한 개념 및 코드에 어려움을 느꼇다.. 다시 한번 강의보며 예제를 작성하고 이해하면서 파악할 시간이 필요할듯하다
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'알고리즘 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 18일차 (0) | 2022.02.10 |
---|---|
패스트캠퍼스 챌린지 17일차 (0) | 2022.02.09 |
패스트캠퍼스 챌린지 15일차 (0) | 2022.02.07 |
패스트캠퍼스 챌린지 14일차 (0) | 2022.02.06 |
패스트캠퍼스 챌린지 13일차 (0) | 2022.02.05 |