본문 바로가기

파이썬 자료구조/그래프

(4)
Shortest Path(최단경로)알고리즘: 다익스트라(Dijkstra), 벨만-포드(Bellman-Ford), 플로이드 와샤(Floyd Warshall) 보호되어 있는 글입니다.
Union-Find집합 자료구조와 MST의 크루스칼, 프림 알고리즘 1. 크루스칼 알고리즘이란? "사이클을 이루지 않는 선에서 n-1개 간선을 탐욕적으로(가중치 순으로) 선택해 나가는 MST알고리즘. 사이클형성여부는 Union-find집합 자료구조로 판별 2. 프림 알고리즘이란? "정점을 탐욕적으로 n개 선택해 나가는 알고리즘이다. 구체적인 방법은 처음에 임의의 정점을 선택하고 선택된 정점을 중심으로 dist배열을 매번갱신하는 것이다." " 이렇게 기억해 둔다. 좀 더 자세히는 최소신장트리를 해결하는 탐욕적 알고리즘의 하나로 n-1개의 간선을 선택할때까지 가중치 순으로 정렬된 간선을 사이클을 이루지 않는 선에서 하나씩 선택해 가는 알고리즘이다. 여기서 사이클을 이루는지의 여부는 Union-Find집합 자료구조로 알수있다. 크루스칼 알고리즘=굳이 그래프를 만들 필요 없음...
그래프의 탐색으로 부터의 응용: 연결성분(부분그래프,Connected component)과 신장트리(Spanning Tree, 모든 정점을 포함하는 트리) 보통 그래프 탐색의 두가지 방법으로 DFS, BFS를 배우고 나면 배운 탐색방법을 가지고 응용된 문제를 접하게 되는데 그중 널리 알려진 것이 연결성분(부분그래프Connected Component)과 신장트리(그래프의 모든 정점을 포함하는 트리,Spanning Tree)이다. 이번 포스팅은 기본적인 DFS, BFS코드가 응용에 들어가면서 어떻게 변형이 되는지를 중점으로 보려고 한다. #연결성분(부분 그래프)-탐색의 응용1. 탐색하여 부분그래프 리스트들의 리스트를 출력하는 것으로 표현됨 #신장트리-탐색의 응용2. 탐색중에 사용된 간선들을 출력하는 것으로 표현됨 1.부분그래프 (연결성분, Connected component) 우선 기본적인 DFS, BFS코드는 아래와 같다. def dfs(graph, star..
파이썬으로 DFS를 구현할때 SET의 상태변화에 대하여. 책에는 DFS를 아래와 같은 코드로 구성하였지만 graph={"A":{"B","C"},"B":{"A","D"},"C":{"A","D","E"}, "D":{"B","C","F"}, "E":{"C","G","H"}, "F":{"D"},"G":{"E","H"},"H":{"E","G"} } def dfs(graph, start, visited=set()): if start not in visited: visited.add(start) print(start, end=' ') nbr=graph[start]-visited for i in nbr: dfs(graph, i, visited) 내 혼자힘으로 구현한 코드는 아래와 같고 문제 없이 잘 동작하였다. graph={"A":{"B","C"},"B":{"A","D"},..