본문 바로가기

728x90

알고리즘

(31)
[알고리즘] 크루스칼 알고리즘 코드 30일 챌린지는 끝났구.. 이어서 계속 되는 알고리즘 공부 기록 남기기. 그저께 크루스칼 알고리즘 이론공부했었고, 오늘은 크루스칼 알고리즘을 코드로 작성해볼 것이다. 코드 작성해보기 전에 어려워서 이론내용 다시 들었다.. ㅠㅠ 우선 그래프를 나타내쟈.. 휴 힘들었당 딕셔너리에 verticies와 edges를 한번에 표현해도 되지만 데이터타입 구분을 위해서 따로 만들어주었다. let vertices: [String] = ["A", "B", "C", "D", "E", "F", "G"] let edges: [(Int, String, String)] = [ (7, "A", "B"), (5, "A", "D"), (7, "B", "A"), (8, "B", "C"), (9, "B", "D"), (7, "B", "E"..
[알고리즘] 패스트캠퍼스 챌린지 30일차 신장 트리(Spanning Tree) Spanning Tree, 또는 신장 트리 라고 불리움 (Spanning Tree가 보다 자연스러워 보임) 원래의 그래프의 모든 노드가 연결되어 있으면서 트리의 속성을 만족하는 그래프 신장 트리의 조건 본래의 그래프의 모든 노드를 포함해야 함 모든 노드가 서로 연결 트리의 속성을 만족시킴 (사이클이 존재하지 않음) 최소 신장 트리 Minimum Spanning Tree, MST 라고 불리움 가능한 Spanning Tree 중에서, 간선의 가중치 합이 최소인 Spanning Tree를 지칭함 최소 신장 트리를 찾는 알고리즘 여러가지 중 Kruskal’s algorithm (크루스칼 알고리즘), Prim's algorithm (프림 알고리즘) 두가지가 대표적! 일단 첫번..
[알고리즘] 패스트캠퍼스 챌린지 29일차 어제 이론 공부한 것을 오늘은 코드로 짜보기! 강의는 여전히 Python이지만 난 Swift로 직접 바꿔보면서 공부중이다. 학습 예제는 어제와 동일하게! 우선 그래프 정보를 아래와 같이 표현해줄 수 있다. let graph: [String: [String:Int]] = [ "A" : ["B" : 8, "C" : 1, "D" : 2], "B" : [:], "C" : ["B" : 5], "D" : ["E" : 3, "F" : 5], "E" : ["F" : 1], "F" : [:] ] func dijkstra(graph: [String: [String:Int]], startNode: String) -> [String: Int] { // distance var distance: [String: Int] = [:..
[알고리즘] 패스트캠퍼스 챌린지 28일차 최단 경로 문제 최단 경로 문제란 두 노드를 잇는 가장 짧은 경로를 찾는 문제임 가중치 그래프 (Weighted Graph) 에서 간선 (Edge)의 가중치 합이 최소가 되도록 하는 경로를 찾는 것이 목적 최단 경로 문제 종류 단일 출발 및 단일 도착 (single-source and single-destination shortest path problem) 최단 경로 문제 그래프 내의 특정 노드 u 에서 출발, 또다른 특정 노드 v 에 도착하는 가장 짧은 경로를 찾는 문제 단일 출발 (single-source shortest path problem) 최단 경로 문제 그래프 내의 특정 노드 u 와 그래프 내 다른 모든 노드 각각의 가장 짧은 경로를 찾는 문제따지고 보면 굉장히 헷깔릴 수 있으므로 명확히 ..
[알고리즘] 패스트캠퍼스 챌린지 27일차 탐욕 알고리즘(Greedy Algorithm) Greedy algorithm 또는 탐욕 알고리즘 이라고 불리움 최적의 해에 가까운 값을 구하기 위해 사용됨 여러 경우 중 하나를 결정해야할 때마다, 매순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행해서, 최종적인 값을 구하는 방식 오호오 문제들로 이해하기 문제1: 동전 문제¶ 지불해야 하는 값이 4720원 일 때 1원 50원 100원, 500원 동전으로 동전의 수가 가장 적게 지불하시오. 가장 큰 동전부터 최대한 지불해야 하는 값을 채우는 방식으로 구현 가능 탐욕 알고리즘으로 매순간 최적이라고 생각되는 경우를 선택하면 됨 => 동전의 갯수가 가장 적으려면? 당연히 4720원을 가장 큰 값인 500원으로 먼저 최대한 많이 채우고, 그다음으로 큰 100..
[알고리즘] 패스트캠퍼스 챌린지 26일차 깊이우선탐색(DFS) 너비 우선 탐색 (Breadth First Search): 정점들과 같은 레벨에 있는 노드들 (형제 노드들)을 먼저 탐색하는 방식 깊이 우선 탐색 (Depth First Search): 정점의 자식들을 먼저 탐색하는 방식 BFS 방식: A - B - C - D - G - H - I - E - F - J 한 단계씩 내려가면서, 해당 노드와 같은 레벨에 있는 노드들 (형제 노드들)을 먼저 순회함 DFS 방식: A - B - D - E - F - C - G - H - I - J 한 노드의 자식을 타고 끝까지 순회한 후, 다시 돌아와서 다른 형제들의 자식을 타고 내려가며 순화함 어제 봤던 내용과 자료지만 비교를 위해 한번더!! DFS도 코드로 구현해보기. 우선 BFS와 동일하게 각 노드마다..
[알고리즘] 패스트캠퍼스 챌린지 25일차 너비우선탐색(BFS) BFS와 DFS란? 대표적인 그래프 **탐색** 알고리즘 - 너비 우선 탐색 (Breadth First Search): 정점들과 같은 레벨에 있는 노드들 (형제 노드들)을 먼저 탐색하는 방식 - 깊이 우선 탐색 (Depth First Search): 정점의 자식들을 먼저 탐색하는 방식 BFS 방식: A - B - C - D - G - H - I - E - F - J 한 단계씩 내려가면서, 해당 노드와 같은 레벨에 있는 노드들 (형제 노드들)을 먼저 순회함 DFS 방식: A - B - D - E - F - C - G - H - I - J 한 노드의 자식을 타고 끝까지 순회한 후, 다시 돌아와서 다른 형제들의 자식을 타고 내려가며 순화함 => 방식에 따라 노드 탐색의 순서가 달라진다! ..
[알고리즘] 패스트캠퍼스 챌린지 24일차 오늘부터 그래프 공부! 이것부터가 진짜이지 않을까 싶당 ㅎ;; 그래프 (Graph) 그래프는 실제 세계의 현상이나 사물을 정점(Vertex) 또는 노드(Node) 와 간선(Edge)로 표현하기 위해 사용 노드 (Node): 위치를 말함, 정점(Vertex)라고도 함 간선 (Edge): 위치 간의 관계를 표시한 선으로 노드를 연결한 선이라고 보면 됨 (link 또는 branch 라고도 함) 인접 정점 (Adjacent Vertex) : 간선으로 직접 연결된 정점(또는 노드) 참고 용어 정점의 차수 (Degree): 무방향 그래프에서 하나의 정점에 인접한 정점의 수 진입 차수 (In-Degree): 방향 그래프에서 외부에서 오는 간선의 수 진출 차수 (Out-Degree): 방향 그래프에서 외부로 향하는 간..

728x90