{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm-Analysis/2020-05-17-알고리즘-SSP-다익스트라알고리즘(Daijkstra)/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"a2ee7ba0-3c28-57cf-b16c-8ffa147365fc","excerpt":"다익스트라 알고리즘은 SSP 문제를 해결하기 위한 알고리즘 중 벨만-포드 알고리즘에 비해서 속도가 더 빠른 알고리즘이다. 하지만 음수 간선이 있을 때는 해답을 찾지 못한다. 그래서 만약 알고리즘 문제에서 음수 간선이 입력으로 주어진다면 벨만-포드 알고리즘을 사용해야하고, 양수 간선으로만 이루어진 그래프가 주어진다면, 벨만-포드 알고리즘과 다익스트라 알고리즘을 모두 사용가능하지만, 속도가 더 빠른 다익스트라를 사용하도록 하자. Algorithm Concept 다익스트라 알고리즘은 BFS…","html":"<p>다익스트라 알고리즘은 SSP 문제를 해결하기 위한 알고리즘 중 벨만-포드 알고리즘에 비해서 속도가 더 빠른 알고리즘이다. 하지만 음수 간선이 있을 때는 해답을 찾지 못한다. 그래서 만약 알고리즘 문제에서 음수 간선이 입력으로 주어진다면 벨만-포드 알고리즘을 사용해야하고, 양수 간선으로만 이루어진 그래프가 주어진다면, 벨만-포드 알고리즘과 다익스트라 알고리즘을 모두 사용가능하지만, 속도가 더 빠른 다익스트라를 사용하도록 하자.</p>\n<h2 id=\"algorithm-concept\" style=\"position:relative;\"><a href=\"#algorithm-concept\" aria-label=\"algorithm concept permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Algorithm Concept</h2>\n<p>다익스트라 알고리즘은 BFS에 간선 거리를 추가한 것과 비슷하다. 다익스트라 알고리즘은 두 개의 정점 집합을 사용한다.</p>\n<ol>\n<li>S : 해당 지점까지의 최단 경로가 이미 구해진 정점들</li>\n<li>Q : S에 속하지 않는 나머지 모든 정점들</li>\n</ol>\n<p>그리고 알고리즘은 아래 순서로 진행된다.</p>\n<ol>\n<li>시작점을 제외한 모든 정점의 최단거리를 양의 무한대로 초기화한다. 시작점은 0으로 초기화 한다.</li>\n<li>모든 정점을 집합 Q에 넣는다.</li>\n<li>Q에서 가장 최단거리가 짧은 정점을 꺼낸다. 이 작업을 더 빠르게 하기 위해서 우선순위 큐를 사용하자.</li>\n<li>꺼낸 정점과 이어진 모든 정점에 대해 Relaxation을 수행한다. Relaxation은 <a href=\"https://jeonyeohun.github.io/articles/2020-05/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B5%9C%EB%8B%A8%EA%B2%BD%EB%A1%9C\">여기</a>에 정리되어 있다.</li>\n<li>집합 Q가 빌 때까지 위 과정을 반복한다.</li>\n</ol>\n<p>시작 지점에서부터 인접해 있는 모든 정점들에 대해 최단거리를 계산하고, 그 다음으로 이동하는 정점의 위치는 최단거리가 가장 짧은 정점이 되기 때문에 이 방법을 사용하면 그 순간 우리가 검사하고 있는 정점에 대한 최단경로를 계속해서 더해가는 방식이다. 따라서 이 알고리즘은 Greedy Algorithm의 성격을 가진다.</p>\n<h2 id=\"example\" style=\"position:relative;\"><a href=\"#example\" aria-label=\"example permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 61%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABCklEQVQoz32TiQ4DIQhE/f9/3fs+aR/JGGq2S2JEhGEATfaV+75Nu/R9322aJtu2zZ5EvvKXpHihy+u6bBxHO8/ThmFwYBJgZ8cW5TgOW9fV41OZlYt5nq1pGt9ZABO0LIsvEuAHe8BJjs5dIisKQRhxxiamkqgjStK2rS+YOyAMuOj73tmodDEgUExlIxCdpfYo1gHVFzmpbAKxw4BAkgJYDkJgPhQYCODfRMVAvYNA7DtJwXHAGAhg13U/DGAZGagFAq+qylsm8FQ+mQhAAOcnqes6t0WVZcBIH6FnlMnTwVmDgJUGQiU6q9z8DkuWAmAHmIFQFr0qn5LOeSjlV1KfxOTt25WVsX8A8wmwTf/dltEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/b2bfd525bed7b2af2dd807c13ef050a0/c1b63/1.png\"\n        srcset=\"/static/b2bfd525bed7b2af2dd807c13ef050a0/5a46d/1.png 300w,\n/static/b2bfd525bed7b2af2dd807c13ef050a0/0a47e/1.png 600w,\n/static/b2bfd525bed7b2af2dd807c13ef050a0/c1b63/1.png 1200w,\n/static/b2bfd525bed7b2af2dd807c13ef050a0/78958/1.png 1320w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span>위와 같은 그래프가 주어져있다고 했을 때, A를 시작점으로 하는 다른 노드들의 최단거리를 구해보자</center></p>\n<h3 id=\"phase-1\" style=\"position:relative;\"><a href=\"#phase-1\" aria-label=\"phase 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 1</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 90.33333333333331%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABWklEQVQ4y4WTi26DMAxF8/+/ihBQWqC8sp1IZzIZ6yxZTmL7+pmUv+k8z6z0vO97nuc5v9/vHKm29e5bioqoBOz1euVpmsp527YSBKqDHMdR9FCKIGa2rmtu27aACQjIsizl3nVdecOOdwOjT4CAThT48XgUBYFiVjWpb5omj+NYAgCaiMDh+XwWRSwDtkQzAMQ7EsaPLLFPsVc68UYAue/7osMRAEBjz7E3eOIACKDIOEkpggOos7a0ydakCIAxTk4MovGWY9+4w9gPw/Az9V9rA1kyd8BiOZEon+BkdwGsl9US6Rtsxq4NAWD7Clvun4Bk5uSR7hsgsSIC2R590923Q5KNQ/qPol+qp2o2yk9sb2PWl6/nHtovpD/A6dIvJHd0dULpbsKCuPTun4utvAWMD0THmN2SnTbrUcu7j3AZip/c6GYav6Q6d/RjhjQ5gsiUbflRAloDfgERgobP+qaBtQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/06994b9e9926f96bae595f1a22e09ab5/c1b63/2.png\"\n        srcset=\"/static/06994b9e9926f96bae595f1a22e09ab5/5a46d/2.png 300w,\n/static/06994b9e9926f96bae595f1a22e09ab5/0a47e/2.png 600w,\n/static/06994b9e9926f96bae595f1a22e09ab5/c1b63/2.png 1200w,\n/static/06994b9e9926f96bae595f1a22e09ab5/b67f3/2.png 1338w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>우선 각 정점이 가지는 최단거리 값을 양의 무한대로 초기화 해준다. 이때 시작점의 최단거리는 0으로 초기화 한다.</li>\n<li>모든 정점을 Q 에 넣는다.</li>\n</ol>\n<h3 id=\"phase-2\" style=\"position:relative;\"><a href=\"#phase-2\" aria-label=\"phase 2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 2</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 90.33333333333331%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABXUlEQVQ4y32Ui5KDMAhF8/8f66PWV2vN7snMcTDaMoOYgJcbIKb8L/u+Z63v7/c7j+OYl2XJd2Ks8UqKjuh8PB55GIY8TVMB3ratJHm9XmUdieBjn3Wqs67rWlh1XZefz2ee57kAsa8CyD7vJEU9TWEIutlhRMZaPp/PaU0M2rZtSU4CNPEAHTZkAphAAxBjsCaFDQyNZV2OzAIwlE0+INAg9vu+Pyz+WD8EIq4TRyFIgDuxOZFZPQ2W5NQUnHRXFggAHt1aeip81DCyTvXImNHx+Ma6aZriI4ZvLoCxLgTBlJpxTD6AVewmDJ1Rj3vMYQ1IjQimdnaWbtrJONAR7LgpddesXazlL4kYF4bxRqh2Nlo0srtl6Gg4xBacekXLPnF3M5lqdgJq2QMoWv2xu5e/DUJGu0tHmTHWvNf22605MfQ+o3yIOkJau++sXgDrpnAM/zzxL1RbtB4Z5A/fMYa3I3M2VgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/f02954d376c036b39db92759d7cf3baa/c1b63/3.png\"\n        srcset=\"/static/f02954d376c036b39db92759d7cf3baa/5a46d/3.png 300w,\n/static/f02954d376c036b39db92759d7cf3baa/0a47e/3.png 600w,\n/static/f02954d376c036b39db92759d7cf3baa/c1b63/3.png 1200w,\n/static/f02954d376c036b39db92759d7cf3baa/b67f3/3.png 1338w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>최단거리 값이 가장 작은 정점을 꺼낸다. 우선순위 큐를 사용하면 손쉽게 꺼낼 수 있다. 가장 처음에는 시작점을 제외한 모든 정점들의 최단거리가 양의 무한대로 설정되어 있기 때문에 당연하게도 시작점이 추출된다.</li>\n<li>\n<p>A가 나왔기 때문에 A와 인접한 다른 모든 정점들을 방문해서 Relaxation으로 최단거리를 업데이트 한다. A와 인접한 정점들을 다 체크해보면,</p>\n<ul>\n<li>B 정점: A에서 B로가는 최단 경로는 간선 가중치인 9이다. 현재 B에는 양의 무한대가 들어가 있으므로 더 작은 값인 9로 업데이트한다.</li>\n<li>D 정점: 위와 같은 과정을 거치면 D의 최단거리는 14가 된다.</li>\n<li>E 정점: 위와 같은 과정을 거치면 E의 최단거리는 15가 된다.</li>\n</ul>\n</li>\n<li>최단거리가 변경되었기 때문에 우선순위 큐의 루트노드도 변경되었음을 생각하자.</li>\n</ol>\n<h3 id=\"phase-3\" style=\"position:relative;\"><a href=\"#phase-3\" aria-label=\"phase 3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 3</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 88.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABrklEQVQ4y4WUSW7DMAxFff9bFV110wsEKNBtkcCO50lm+RR/R3HilgBDWSQ/RyWzlZZl2WQ8+s+57C2vh9u9eLW7296/oSxVRF4VZTva26m191NlTeOgYbZlDlE3juMT8DRNUWb7CHMItrjzzzm3j6/aPr8b69vebHKQYbCl7627Xi10nd9N7jC7vrXWuXddzHD2Sxjwqqpc2TlosGGcIh+S+4xuX1wuVrrsPEhGqqA3TWN1XVsIYetZcAcF7Nxm8Ayxp2ScO89o8PPVM8YXXUaaGJIZl3xjTJCyLKO8eAZI9EgcCax2KVAcCpcCgNNpi9ArIGdVIeIe0G3K95bMD0oIZ5VDEL5pD4wdVRBESWTpymglMOabAGQ9r71MiYwBwxabDXC/1Coxz/PoAANINgSjxzD3gHLm/gkwzZLybuvTbi3AqSiKB2dNPE3oZYYQkQHcD+CI5JvtL4iqjGDOR6zeHmZIVmqylh1H7ar6p11Mp/v055BOmL6JBZ4G0QNIp/sSEIkxT0kT1hnJUBiW5L+AWlgM41t1Vpl6TVor6E/AtI/7MtNyAVNQvagU8Bd5JoXwEuJA6AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/0165a289d887504c659f99ac114e17f7/c1b63/4.png\"\n        srcset=\"/static/0165a289d887504c659f99ac114e17f7/5a46d/4.png 300w,\n/static/0165a289d887504c659f99ac114e17f7/0a47e/4.png 600w,\n/static/0165a289d887504c659f99ac114e17f7/c1b63/4.png 1200w,\n/static/0165a289d887504c659f99ac114e17f7/4352a/4.png 1364w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>이제 본격적으로 시작이다.</p>\n<ol>\n<li>A의 노드들에 대한 검사가 끝났기 때문에, 다시 큐에서 최단거리가 가장 짧은 정점을 꺼낸다. 이때 B의 최단거리가 가장 짧기 때문에 B가 선택된다.</li>\n<li>B와 연결된 정점들에 대한 Relaxation을 진행한다. B는 C와 연결되어 있기 때문에 Relaxation을 끝내면 C의 최단거리는 <code class=\"language-text\">9 + 20 = 29</code>으로 갱신된다.</li>\n</ol>\n<h3 id=\"phase-4\" style=\"position:relative;\"><a href=\"#phase-4\" aria-label=\"phase 4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 4</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 89.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABr0lEQVQ4y4WUWW7DMAxEdf8r9QjtAfJTBOhXUSCNV0mWF5ZPMAvCcVoBhBxRHA6HVILsa9u2hz3nLNM0iV/eb+ZXeOYspUiMUfq+r8DzPMuyLNXH9xHIzsLRsa5rDbzf7zIMg4zjqMBJsjIFOKUkTdPUZCSd1IZ6J1Z/ZQgABjiMCAKYrNhZyeaPXSfN7VaTExfqoaLDhEMu2rISy7zI9SvKrcsgyYK2mlgpckmyfvcaC1Yw4WEGoJVFkk6zl5zk8nGTl0uU1+sgRX2AiNMcOaySqqEBYMdus9o+ydu1l/fPQWTKtYrVyQARm4bg9aFE76zAGrylKOsCg62WvKKx2qz3qAJCRiIcR4bOoSe/V0pTCdZdS78KmisY2lHZL+DZUJPxW8cmMYNqRQFhTTI0xpq2k3Znx/kDoGeJwDRp1MwmAUHMnwXTFBsrT+iUYe2csqAUP0Z/LYsNxwMyGiMzfp+ZzelThrAa92dku31P+9Mz5iT23X34c/AdRrejeXB7AL67p4DsXG7bts6XN84wmkVz2P8FJDtGKVaePUUbGXtZrD8Bz3T05pOZ316UB/wBLYqGEr8ll3sAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/961eab853628f4ead7d853dd446889a0/c1b63/5.png\"\n        srcset=\"/static/961eab853628f4ead7d853dd446889a0/5a46d/5.png 300w,\n/static/961eab853628f4ead7d853dd446889a0/0a47e/5.png 600w,\n/static/961eab853628f4ead7d853dd446889a0/c1b63/5.png 1200w,\n/static/961eab853628f4ead7d853dd446889a0/37048/5.png 1352w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>큐에서 정점 하나를 또 뽑아보면 이번엔 D가 나온다. D와 연결된 다른 정점들에 대해서 Relaxation을 수행해보자.</p>\n<ol>\n<li>정점 E : 정점 D를 거쳐서 정점 E로 가는 경로의 최단거리는 <code class=\"language-text\">14 + 7 = 21</code>이다. 정점 E에는 이미 최단 경로인 15가 저정되어 있는데, 이 값이 D로부터 계산된 값보다 작기 때문에 최단거리를 업데이트 하지 않고 유지한다.</li>\n<li>정점 F : 정점 F에는 양의 무한대가 저장되어 있기 때문에, D로부터 오는 최단거리 <code class=\"language-text\">14 + 7 = 21</code>이 새로운 최단거리가 된다.</li>\n<li>정점 C : 정점 C가 가지고 있는 최단거리는 29인데 D를 거쳐서 가는 거리는 <code class=\"language-text\">14 + 10 = 24</code>이므로 기존에 저장된 거리보다 짧다. 따라서 C의 최단거리를 24로 업데이트한다.</li>\n</ol>\n<h3 id=\"phase-5\" style=\"position:relative;\"><a href=\"#phase-5\" aria-label=\"phase 5 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 5</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 89.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABk0lEQVQ4y3WUW2rEMAxFvf9Ntf+lC2ih9LtlmMl7MokT1ceda4RJBEKJJV+9HSzRvu+Z9Q3FGO1+v9vj8bAj0h3Zi4JXeOU4jjYMg03TlIFxsK5rceRp27as436oPaMgquv1mkEBnOc5n8GA9X2fJeewnPOdI5RnGMWyLCVtvNckW3SXy8WaprGu67KTIA8whx5cYLJR6kSIYyLGuXTYB6WgQwwwVBowEWADo6sbga3OAqiAqCZ1JyFAlYWi8unjCJkB64aQth8VLtMYD8C/mnC73Yp97nI9Mv/RTmU8uLxVKUJ9cqxaEkgB9KlJ9sNob1+NvX+3Ng0pui3anhyt1IqyJI7U91kGNe8ccFrs5XO014/euiEBxNU2UgdQW/IskQcrm1KvH/TTzvbbHq/d0RoeRqgaUuS4LpnzhqQUOdfGSKqzPpjgwWiAWPVR4WkQ/4BIqvseI3h0DbSGWoCwRgUbSc3tKaCGlFls27ZINgUQZg695CmgDvWK6FWZXe3Q69mSPEy57hKXVUcNtv/20jdF9Adc24WzLR75kAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/f1ee488a19c56039e89b1bae05bf8d5b/c1b63/6.png\"\n        srcset=\"/static/f1ee488a19c56039e89b1bae05bf8d5b/5a46d/6.png 300w,\n/static/f1ee488a19c56039e89b1bae05bf8d5b/0a47e/6.png 600w,\n/static/f1ee488a19c56039e89b1bae05bf8d5b/c1b63/6.png 1200w,\n/static/f1ee488a19c56039e89b1bae05bf8d5b/37048/6.png 1352w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>다음 정점은 E이다. E와 연결된 정점은 F 하나 뿐인데, F에 저장되어 있는 최단거리는 21이다. E를 통해 F로 가게되면 최단거리가 15 + 20 = 35가 되기 때문에 이번에는 최단거리를 업데이트 하지 않고 끝낸다.</p>\n<h3 id=\"phase-6\" style=\"position:relative;\"><a href=\"#phase-6\" aria-label=\"phase 6 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 6</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 89.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABjUlEQVQ4y4WUzU7EMAyE8/6vxIVX4MAFVuJIq6r0/2e37Xr7ZZkqDVWJZNx17MmM4+Dsd93v951flsW6rvOmWLyIx3tOwXizaRobx9Hqura2bf337XazaZqsqirvtfgehsHmeTYXn8oGBlDf91sihwEIMHa9Xr1xMAeghFzPUEkUCCBesAjbAhgx2Od5vily/AGEEwgCRiIFJKtIDMjXb3JEiD2+HayQpiSByUguy3I7kMJ4sSdVTnLCxh71lSK1BgJMwVP/cxomAcbXzmWELGBJQdxP2H58t/b29bPmj1tv3dE8aUzEbDef+JVVklf28l7Y6+doRXsAGHpYFUXhWej2AGc8kKtpuCStXdJ+bdNyDkgfAYIpheoXwGevZruUMKAFyNEFnT2/Q4YalXBsZLAlJo/0mIwLT0AiUjVzkq3npefIb8DCC5PtAJFJMoMcG5eEAYrnAI3XDjCkrKclybCQl2T6Cks8sVPJSEjT1LIs80WhsYd8/YfBE//DkCS9YxKTJPGGpP9M/RYG9gD9fYJ3eHI9FgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/034a3eaa2b7167371cba361af7f06e49/c1b63/7.png\"\n        srcset=\"/static/034a3eaa2b7167371cba361af7f06e49/5a46d/7.png 300w,\n/static/034a3eaa2b7167371cba361af7f06e49/0a47e/7.png 600w,\n/static/034a3eaa2b7167371cba361af7f06e49/c1b63/7.png 1200w,\n/static/034a3eaa2b7167371cba361af7f06e49/37048/7.png 1352w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>다음으로 검사할 정점은 F이다. 그렇지만 F와는 연결되어 있는 정점이 없기 때문에 곧바로 끝낸다.</p>\n<h3 id=\"phase-7\" style=\"position:relative;\"><a href=\"#phase-7\" aria-label=\"phase 7 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 7</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 89.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAABlklEQVQ4y4WUwW6EMAxE8/+/1Ft/oJdKlSpV2ksPrdQuLBBCgHXzUmaVzbJtJMsQnLHHnuBsW+fz+cqv62rDMGTTXr3Yr785bdYfu66zEIKdTifr+z4/xxhtnmdr2zZ7rRBn+2jGtLeYq7OO45gNIO99fl6WJScDEGBsmiYLyYa+s6dDaw8vg719jr8VKogDAqgXFZVtATCmyvzQ2/Phyx5fO3v/DuYAAoReQRMwDnMAqjzj+U4c8XqPKSa3KnnvA6nMURXUFCQwGQBN01wSAlqvNe2tGysnOtg9umKg1lAAKtjkYEt6j9uQXD12hlFWQZWA1f2k2i6x8sejrSlGvXV7epJMVFmtU6pDOscEpqpvAEtPVQTnKjY9Ag4IdKUGEpf07wLSR4A4wEEdAPivW3MZSrlxmRzN3hnQX9dvt0JJpZSNjGrZk4d6XcwVIBShKs2JNp7+6Toqph7YDSCeYIRcG0PCAMWTQPK6C0h2Uam9KNNX4vClXHYBOaA/DHR4lvEOfRLAYsr31+8D1pLRVfzPSv1p/QABxoWsn2HznQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/4bb8c824344d907215d882ccd0a776e9/c1b63/8.png\"\n        srcset=\"/static/4bb8c824344d907215d882ccd0a776e9/5a46d/8.png 300w,\n/static/4bb8c824344d907215d882ccd0a776e9/0a47e/8.png 600w,\n/static/4bb8c824344d907215d882ccd0a776e9/c1b63/8.png 1200w,\n/static/4bb8c824344d907215d882ccd0a776e9/37048/8.png 1352w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>한번 더 진행해보자. 우선순위 큐에서 정점하나를 더 뽑아오면, C가 나온다. C는 F와 연결되어 있지만 C를 거쳐 F로 가는 최단거리는 <code class=\"language-text\">24 + 15 = 39</code> 이다. 따라서 현재 F의 최단거리를 유지한다.</p>\n<h2 id=\"alogrithm-analysis\" style=\"position:relative;\"><a href=\"#alogrithm-analysis\" aria-label=\"alogrithm analysis permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Alogrithm Analysis</h2>\n<p>다익스트라 알고리즘은 우선순위 큐를 사용하기 때문에 어떤 종류의 우선순위 큐를 사용하는지에 따라서 속도가 달라진다. 가장 일반적인 Binary Heap 을 사용하게 되면 각 연산은 O(lg V) 의 시간이 요구되므로 이 연산을 모든 relaxation에 대해 진행하기 때문에 전체 시간 복잡도는 <code class=\"language-text\">O(E lg V)</code> 가 된다.</p>","frontmatter":{"title":"[알고리즘 정리] 다익스트라 알고리즘(Daijkstra Algorithm)","date":"May 17, 2020"}}},"pageContext":{"slug":"/Algorithm-Analysis/2020-05-17-알고리즘-SSP-다익스트라알고리즘(Daijkstra)/","previous":{"fields":{"slug":"/Problem-Solving/2020-05-17-1753번-최단경로/"},"frontmatter":{"title":"[백준 알고리즘] 1753번: 최단경로","category":"Problem-Solving","draft":false}},"next":{"fields":{"slug":"/Algorithm-Analysis/2020-05-17-알고리즘-SSP-DAG/"},"frontmatter":{"title":"[알고리즘 정리] DAG에서 최단경로를 찾는 법","category":"Algorithm-Analysis","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}