최단 경로(Shortest path)
변마다 길이(가중치, weight)가 붙은 그래프에서 두 점을 잇는 가장 짧은 길. 길이가 음수가 아니면, 가까운 곳부터 차례로 거리를 확정해 나가는 다익스트라 알고리즘(Dijkstra's algorithm)으로 찾는다.
지도 앱이 길을 찾을 때, 도로망은 교차로(꼭짓점, vertex)와 도로(변)로 된 그래프이고 각 도로를 지나는 데 걸리는 시간이 변의 가중치입니다. 찾는 것은 가중치의 합이 가장 작은 길입니다. 가능한 길의 수는 교차로 수에 따라 기하급수적으로 늘어나서 하나하나 비교할 수는 없습니다.
실마리는 최단 경로의 일부도 최단 경로라는 사실입니다. v까지 가장 짧은 길이 u를 거쳐 온다면, 출발점에서 u까지도 가장 짧게 왔어야 합니다. 그래서 출발점 s가 아닌 점 v까지의 거리
1959년 네덜란드의 컴퓨터 과학자 에츠허르 데이크스트라가 발표한 다익스트라 알고리즘은 이 식을 가까운 곳부터 채웁니다. 점마다 잠정 거리, 곧 지금까지 찾은 길 가운데 가장 짧은 것의 길이를 적어 둡니다(아직 길을 못 찾았으면 ∞). 이 값은 더 좋은 길이 나타나면 줄어들 수 있습니다. 매 단계 아직 확정하지 않은 점 가운데 잠정 거리가 가장 작은 점을 골라 그 값을 진짜 거리로 확정하고, 그 점을 거쳐 가면 더 가까워지는 이웃이 있으면 그 이웃의 잠정 거리를 줄입니다. 가중치가 음수가 아니면 지금 가장 작은 잠정 거리는 다른 길로 돌아가도 더 줄어들 수 없으니, 확정해도 안전합니다. 확정된 점들의 집합(set)이 출발점에서 물결처럼 퍼져 나갑니다. 지금 가장 좋아 보이는 점을 골라 되돌아보지 않으니, 욕심쟁이 알고리즘(greedy algorithm)이 정확한 답을 주는 대표적인 경우입니다. 잠정 거리가 가장 작은 점을 빠르게 꺼내려고, 가장 작은 값을 늘 맨 앞에 두는 자료 구조인 우선순위 큐(흔히 힙(heap)으로 만듭니다)에 점들을 담아 둡니다. 점마다 어느 이웃에서 왔는지 기록해 두면, 그 화살표들이 출발점을 뿌리로 하는 트리(최단 경로 트리(tree))를 이룹니다.
왼쪽 위 출발점에서 시작합니다. 아래 ◀ ▶로 한 단계씩 진행해 보세요. 청록 점은 확정, 노란 점은 잠정 거리만 아는 점, 회색 점은 아직 못 본 점(∞)입니다. 점을 누르면 목표(분홍 고리)가 바뀝니다.
변의 가중치:
음수 가중치가 있으면 나중에 음수 변을 지나 더 짧아질 수 있어서 확정이 더는 안전하지 않습니다. 이런 일은 일방통행처럼 변에 방향이 있는 그래프에서 의미가 있습니다. 방향 없는 변의 가중치가 음수이면 그 변을 오가기만 해도 끝없이 짧아지니까요. 일반적으로 한 바퀴 돌면 길이의 합이 음수가 되는 고리가 있으면 최단 경로 자체가 없습니다. 그런 고리가 없을 때는 벨먼–포드 방법(1950년대에 미국의 수학자 리처드 벨먼과 레스터 포드가 따로 내놓았습니다)을 씁니다. 모든 변에 대해 '이 변을 거쳐 가면 더 짧아지는가'를 확인해 잠정 거리를 줄이는 일을 (점의 개수 − 1)번 되풀이하는 방법입니다. 한 번 더 되풀이해서도 줄어드는 곳이 있으면 음수 고리가 있다는 뜻입니다. 지도 앱은 A* 탐색(A* search)을 흔히 씁니다. 다익스트라처럼 잠정 거리만 보지 않고, 거기에 그 점에서 목표까지의 직선거리를 더한 값이 가장 작은 점부터 확정해서 목표 쪽을 먼저 살핍니다. 변의 가중치가 실제 거리라면 피타고라스 정리(Pythagorean theorem)로 잰 직선거리는 남은 실제 길보다 결코 길지 않습니다. 이렇게 남은 거리를 부풀리지 않는 어림을 쓰면 답은 여전히 최단입니다(가중치가 시간이라면 직선거리를 가장 빠른 속력으로 나눈 값을 씁니다). 모든 두 점 사이의 최단 거리를 한꺼번에 구하는 방법도 있습니다. 행렬의 곱(matrix multiplication)에서 곱셈을 덧셈으로, 합을 최솟값으로 바꾼 '최소-합 곱(min-plus product)'을 생각하면, 그 (i, j) 성분은 i에서 어떤 점 k를 거쳐 j로 가는 길이 가운데 가장 작은 값이 됩니다. 대각선을 0으로 둔 변 길이 표에 이 곱을 거듭하면 변을 두 개 이하, 세 개 이하, … 쓰는 길까지 차례로 고려하게 됩니다. 음수 고리가 없으면 (점의 개수 − 1)개까지만 보면 되므로, 결국 모든 쌍의 최단 거리가 나옵니다. 가중치가 음수가 아니면, 이렇게 얻은 거리표에 이 곱을 한 번 더 해도 바뀌지 않는다는 것이 곧 삼각부등식(triangle inequality)
이어지는 곳. 그래프 대신 매끄러운 곡면 위에서 두 점을 잇는 가장 짧은 곡선(예를 들어 지구 위의 대원 항로(great-circle route))이 측지선(geodesic)입니다. 좁은 세상(small world)은 거대한 연결망에서 최단 경로가 놀랄 만큼 짧다는 관찰이고, 모든 도로를 적어도 한 번씩 돌아야 하는 우편배달부 문제(Chinese postman problem)에서는 최단 경로가 오일러 경로(Euler path)를 만드는 부품으로 쓰입니다. 아무 길이나 골라 떠도는 무작위 행보(random walk)로 목표에 닿으려면 보통 최단 거리보다 훨씬 많은 걸음이 듭니다. 모든 점을 이어 주는 가장 짧은 도로망을 찾는 것은 다른 문제로, 한 점에서의 거리 대신 변 길이의 합을 줄이는 최소 신장 트리(minimum spanning tree)가 답입니다. 도로망이 한꺼번에 차를 얼마나 많이 보낼 수 있는지는 최대 흐름 최소 절단 정리(max-flow min-cut theorem)가 답합니다.
한 낱말을 다른 낱말로 바꾸는 데 필요한 최소 편집 횟수(글자 하나를 넣기, 지우기, 바꾸기를 각각 한 번으로 셉니다)를 편집 거리(edit distance)라고 합니다. 예를 들어 kitten을 sitting으로 바꾸려면 k→s, e→i로 두 번 바꾸고 g를 한 번 넣어 모두 세 번이 듭니다. 이것도 최단 경로입니다. 두 낱말의 앞부분끼리 짝지은 표의 칸을 점으로 봅니다. 넣기와 지우기는 가로나 세로로 한 칸, 바꾸기는 대각선으로 한 칸 가는 가중치 1인 변이고, 같은 글자를 그대로 두는 대각선 이동은 가중치 0인 변입니다. 그러면 표의 왼쪽 위에서 오른쪽 아래까지 가는 최단 경로의 길이가 편집 거리입니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 최적화
… 고를 수 있는 것이 연속적인 값이 아니라 유한한 갈림길일 때도 있습니다. 지도 위 가장 빠른 길 찾기는최단 경로문제입니다. 매 순간 가장 좋아 보이는 갈림길만 고르는 욕심쟁이 알고리즘은 빠르지만 늘 최선의 답을 …
- 행렬의 곱
… B)_{ik} = \min_j (A_{ij} + B_{jk}) 로 도로 지도의 거리표를 거듭 곱하면최단 경로의 길이가 나옵니다. 자기 자신까지의 거리가 0인 완성된 거리표 D가 D\odot D = D 를 만족한다는 …
- 측지선
… 이어지는 곳. 연결망에서 두 점 사이를 가장 적은 단계(또는 가장 짧은 총 길이)로 잇는 길, 곧최단 경로는 측지선의 이산판입니다. 곡면 대신 점과 선으로 된 그래프 위에서 가장 짧은 길을 찾는 일이라, …
- 그래프
… 상태로 옮겨 갈 확률)이 되고, 그 위를 떠도는 산책자가 페이지랭크를 계산합니다. 변에 길이를 붙이면최단 경로와 최소 신장 트리 문제가, 지도의 나라를 점으로 바꾸면 4색 정리가, 수십억 명의 친구 관계를 …
- 오일러 경로
… 홀수 점이 없으면 오일러 회로 자체가 답입니다. 홀수 점이 있으면 그 점들을 둘씩 짝지어, 짝마다최단 경로를 한 번 더 걷기로 합니다. 이렇게 겹쳐 걷는 길을 변으로 더하면 모든 점의 차수가 짝수가 되어 오일러 …
- 좁은 세상
… 다른 점에 다시 잇습니다. 그리고 두 가지를 잽니다. 평균 경로 길이 L 은 무작위로 고른 두 점 사이최단 경로길이의 기댓값입니다. 뭉침 계수 C 는 한 점의 두 친구가 서로도 친구일 확률(이웃 쌍 가운데 …
- 최적 수송
… 바서슈타인 거리로도 다가갑니다(큰 수의 법칙). 도시들을 잇는 그래프 위라면 칸 사이의 거리 대신최단 경로의 길이가 비용이 되고, 문자열을 바꾸는 최소 비용인 편집 거리도 같은 생각입니다. 흙더미와 구덩이가 …
- 거리 함수
… 거리⟧, 단어의 편집 거리, 모든 점이 이어지고 모든 선이 양방향이며 선의 길이가 양수인 그래프에서최단 경로의 길이, 구면 위의 대원 거리(구면기하, 하버사인 공식), 푸앵카레 원판의 쌍곡 거리가 모두 …
- 맨해튼 거리
… 비스듬히 누운 파스칼의 삼각형을 이룹니다. 도로망을 그래프로 보면 맨해튼 거리는 그 그래프 위의최단 경로길이입니다. 한 점에서 택시 거리가 r = 인 점들을 모으면 원이 아니라 45° 기울어진 …
- 체비쇼프 거리
… 되어 파스칼의 삼각형이 판 위에 나타납니다. 판을 칸이 꼭짓점인 그래프로 보면 두 거리 모두최단 경로의 길이입니다. 평면에서 두 거리는 사실 같은 것을 45° 돌려 본 것입니다. u = x + y , v = …
- 보로노이 다이어그램
… 대신 좌표별 중앙값으로 옮겨야 합니다. 이어지는 곳. 곧은 거리 대신 도로를 따라 재면 그래프의최단 경로거리로 나눈 보로노이가 됩니다. 불이 났을 때 어느 소방서가 가장 빨리 닿는지 정하는 지도입니다. 지구 …
- 해밍 거리
… 정육면체의 꼭짓점에 놓으면, 한 비트만 다른 문자열끼리 모서리로 이어집니다. 해밍 거리는 모서리를 따라가는최단 경로의 길이입니다. 이 정육면체는 그래프이고, n비트라면 n차원 정육면체(초입방체)가 됩니다. 한 점에서 …
- 편집 거리
… 화살표는 치환(같은 글자면 비용 0)입니다. 편집 거리는 왼쪽 위 모서리에서 오른쪽 아래 모서리까지 가는최단 경로의 길이이고, 색칠한 길이 그 경로입니다. 대각선을 빼고 오른쪽과 아래로만 가는 길만 해도 이항계수만큼 …
- P 대 NP 문제
… 붙은 변의 개수(차수)를 세어 홀수인 꼭짓점이 0개나 2개인지만 보면 되고(그래프가 이어져 있을 때),최단 경로도 길이가 음수가 아니면 다익스트라 알고리즘(에츠허르 데이크스트라, 1959)으로 빠르게 풉니다. …
- 은닉 마르코프 모델
… 씌우면 곱이 합으로, 최대가 최소로 바뀌어, 이 계산은 날짜별 상태를 점으로 둔 격자 그래프 위의최단 경로찾기가 됩니다. 한 걸음씩 나아가는 계산은 거리표끼리 곱셈 대신 덧셈을, 덧셈 대신 최솟값을 쓰는 …
- 동적 계획법
… 세웠습니다. 이어지는 곳. 두 문자열의 편집 거리는 두 낱말의 앞부분끼리의 거리를 표에 채워 구하고,최단 경로는 '가장 짧은 길의 일부도 가장 짧은 길'이라는 같은 원리 위에 서 있습니다. 관측된 소리나 낱말들 뒤에 …
- 욕심쟁이 알고리즘
… 묶는 허프만 부호, 가장 가까운 점부터 확정하는 다익스트라 알고리즘(에츠허르 데이크스트라)의최단 경로입니다. 다익스트라 알고리즘은 변의 길이가 음수가 아닐 때만 옳습니다. 음수 변이 있으면 이미 확정한 점에 …
- 힙과 우선순위 큐
… 발표했습니다). 이어지는 곳. 변의 길이가 음수가 아닌 그래프에서 데이크스트라가 만든 다익스트라최단 경로알고리즘은 '아직 확정하지 않은 점 가운데 가장 가까운 점'을 힙에서 꺼내고, 1957년 로버트 프림이 …
- 트리
… 신장 트리⟧입니다. 다익스트라 알고리즘도 점마다 어느 이웃에서 왔는지를 기록하면 출발점을 뿌리로 하는최단 경로트리를 남깁니다. 합집합-찾기라는 자료 구조는 서로 겹치지 않는 무리 하나하나를 트리로 두고 그 뿌리를 …
- 최소 신장 트리
… 수 있지만, 길이 합은 모두 같습니다. 비슷해 보이는 다익스트라 알고리즘(에츠허르 데이크스트라)의최단 경로트리는 출발점에서 각 점까지의 거리를 줄이는 것이라 결과가 다릅니다. 최소 신장 트리에서 두 점 사이의 …
- 최대 흐름 최소 절단 정리
… 탐색(s에서 한 걸음, 두 걸음 떨어진 점들을 차례로 훑는 방법)으로 찾습니다. 모든 변의 길이가 1인최단 경로찾기인 셈입니다. 이렇게 하면 늘리는 횟수가 꼭짓점 수와 변 수의 곱 정도로 묶입니다(점근 표기법). …
- 풍부화된 범주: 거리를 범주로
… 0이 됩니다. 도로 지도에서 이렇게 얻은 D는 '도로 지도가 만드는 가장 자유로운 로베어 거리 공간'으로,최단 경로는 그래프에서 자유롭게 생성한 풍부화된 범주입니다. 다익스트라 알고리즘(데이크스트라, 1959)은 한 …
- 반환
… 가우스 소거법으로 그 역행렬을 구하는 계산과 같습니다. (min, +)에서는 음수 고리가 없을 때최단 경로의 플로이드–워셜 알고리즘이고, 글자열의 반환에서는 오토마톤을 정규 표현식으로 바꾸는 클리니의 방법입니다. …