본문 바로가기
728x90

전체 글138

최단경로 - 3 Floyd-warshall 알고리즘 : all to all - 가중치 방향 그래프 G=(V,E), V={1,2,...,n} - 모든 노드 쌍들간의 최단경로의 길이를 구함 - d^k[i,j] : 중간에 노드집합 {1,2,...,k}에 속한 노드들만 거쳐서 노드 i에서 j까지 가는 최단경로의 길이 i와 j가 바로 연결 첫 번째 : 연결 두 번째 : 연결 x n개의 노드가 있으므로 i에서 j로 갈 때 n개의 노드를 거쳐서 감 k를 거치지 않고 간다면 d^k-1[i,j] k를 거쳐서 간다면 d^k-1[i,k] + d^k-1[k,i] 따라서 위의 두 값 중 최솟값을 고르면 된다. 수도코드 - 1 수도코드 - 2 경로 찾기 - 파이 이차원 배열을 만들어준다 - k를 거쳐서 가게 된다면 파이 배열에 k를 넣어준다 경.. 2021. 3. 30.
최단경로 - 2 bellman-ford 알고리즘 예시 - bellman-ford 알고리즘은 시간복잡도 측면에서 효율적이지 않음 => o(nm) - 알고리즘을 한번 실행할 때마다 오른쪽 부분에서는 불필요한 계산이 계속 일어남 - v이전에 노드들을 다 갱신한 후 v의 오른쪽 부분을 갱신하면 불필요한 계산을 줄일 수 있음 => Dijkstra 알고리즘 Dijkstra 알고리즘 - distance가 제일 적은 노드를 기준으로 그 노드와 연결된 노드의 distance를 구한다. - 처음 distance가 0인 노드를 시작한다. - distance가 0 인부분은 다신 안봐도 되므로 오른쪽 부분에서만 가장 작은 distance를 찾는다 - distance가 5인 노드가 제일 작으므로 이 노드를 기준으로 연결된 노드들의 distanc.. 2021. 3. 30.
최단경로 - 1 최단경로 - 가중치 (방향) 그래프 G=(V,E), 즉 모든 에지에 가중치가 있음 - 경로 p=(v0,v1,....vk)의 길이는 경로상의 모든 에지의 가중치의 합 - 노드 u에서 v까지의 최단경로의 길이를 ∂(u,v)라고 표시하자 ==> 최단경로를 공부하는 목적 최단경로문제의 유형 - single-source : 하나의 출발 노드 s로부터 다른 모든 노드까지의 최단 경로를 찾아라. 예 : Dijkstra의 알고리즘 - single-destination : 모든 노드로부터 하나의 목적지 노드까지의 최단 경로를 찾아라. single-source 문제와 동일 - single-pair : one-to-one 주어진 하나의 출발 노드 s로 부터 하나의 목적지 노드 t까지의 최단 경로를 찾아라 최악의 경우 시간복.. 2021. 3. 29.
[백준1707] 이분 그래프 [java] 이 문제를 풀기 위해서 이분 그래프가 무엇인지 먼저 공부할 필요가 있었다!! 정말 쉽게!! 한 노드의 색깔이 빨간색이라고 하면 그와 연결된 노드들의 색깔은 파란색인 것이다. 하지만 그 파란색 노드들끼리는 연결되면 안된다. 즉 연결된 노드들은 서로 색깔이 달라야 하는 것이다. 나는 이 문제를 dfs를 이용해서 풀었다. 또한 방문했는지는 배열을 만들어 0,1,2을 입력해서 방문여부를 확인했다 0인 경우에는 방문 x, 1인 경우에는 part1, 2인 경우에는 part2인 것으로 만들었다. dfs메소드를 이용하여 모든 노드들의 part를 정하고 마지막에 연결된 노드인데 part가 같은 경우 "NO"를 출력하도록 했다. 코드 package baekjoon; import java.util.ArrayList; imp.. 2021. 3. 28.
[백준7569] 토마토 [java] 이전에 풀었던 토마토 문제와 비슷하지만 새로운 메소드를 만들지 않고 while문을 통해 풀었다. 또한 3차원으로 생각하고 문제를 풀었다. 상,하,좌,우,위,아래 총 6부분을 생각하면 된다 코드 package baekjoon; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class tomato2 { static int[] dx = {-1,0,1,0,0,0}; static int[] dy = {0,1,0,-1,0,0}; static int[] dz = {0,0,0,0,-1,1}; public static void main(String[] args) { Scanner sc = new Scanner(Sy.. 2021. 3. 27.
최소비용신장트리 - 4 prim의 알고리즘 -임의의 노드를 출발노드로 선택 - 출발 노드를 포함하는 트리를 점점 키워 감 - 매 단계에서 이미 트리에 포함된 노드와 포함되지 않은 노드를 연결하는 에지들 중 가장 가중치가 작은 에지를 선택 MST가 되는 이유 - S 와 V-S에서 cross를하면서 가장 가벼운 노드를 고르는 것이므로 MST가 될수 있다. 가중치가 최소인 에지 찾기 - Va : 이미 트리에 포함된 노드들 - Va에 아직 속하지 않은 각 노드 v에 대해서 다음과 같은 값을 유지 key(v) : 이미 Va에 속한 노드와 자신을 연결하는 에지들 중 가중치가 최소인 에지 (u,v)의 가중치 ∏(v) : 그 에지 (u,v)의 끝점 u - 노드들 중에서 key값이 최소인 값을 찾으면 된다. - 다음 노드를 찾는데 걸리는 시간.. 2021. 3. 24.
728x90