플로이드 알고리즘
플로이드 알고리즘을 공부하는데 몇가지 이해가 안되는 점이 있습니다.
D의 k승은 k개의 정점을 지나는 최단 경로 길이의 행렬이고,
모든 정점을 지날 수 있는 최단 경로의 길이는 입니다.
즉, D에 주어진 행렬의 크기(길이)만큼 제곱을 해줘야 모든 경우의 수의 최단 경로를 알 수 있다는 것 입니다.
그런데 강의에서 제곱이 아닌 재귀관계식의 형태로 본것이 첫번째로 이해가 잘 되지 않고,
두번째는 제 생각에는 형태로 다른 정점
을 지나면 새로운 경로가 있는 경우가 되야 할것 같은데,
위와 같은 형태로 에서 k가 마치 함수의 매개변수 인것처럼 보이고 승수가 행렬의 인덱스처럼 사용되는 점이 이해가 되지 않습니다.
세번째는 재귀 관계식를 이용해서
을 구해야 최단 경로의 길이를 구할 수 있는데,
로 n번의 연산과정이 있어야 함에도 단 한번의 플로이드 함수를 돌린 리턴값이
가 될 수 있는 이유를 모르겠습니다... 제가 봤을때는 한번 플로이드 함수가 돌리면 하나의 정점을 지난 최단 경로가 나와야 할것 같은데....
이 세가지가 플로이드 알고리즘에서 이해가 되지 않는 부분입니다!
답변 해주시면 감사합니다!
Answer 2
0
1.
D^k는 수학에서의 행렬 거듭제곱과는 무관한 표기법입니다.
W가 인접행렬이고, W=D^0으로 정의할 수 있으며,
D^k는 플로이드 알고리즘에서 k번째 루프를 실행한 시점의 인접행렬로 이해해야 합니다.
2.
위 1번에서 처럼, k가 현재 계산된 경로 길이라고 생각하면
마치 매개변수처럼 사용되는 것은 이해가 가능할 것입니다.
3.
위 1번/2번의 오해를 교정해서 재귀식의 의미를 잘 곱씹어서 생각해 보면
D^n까지 진행하면 모든 쌍의 최단 경로 길이가 계산된 인접행렬을 얻는다는 것을 이해할 수 있습니다.
0
k가 0일때 부터 보면
k=0
0정점을 지날 수 있을때의 최단거리
k=1
0,1정점을 지날 수 있을때의 최단거리
k=2
0,1,2정점을 지날 수 있을때의 최단거리
.
.
.
k=n-1
0,1,2, ..., n-1정점을 지날 수 있을 떄의 최단거리 (=모든 정점을 지날 수 있을 때의 최단거리)
가 되서 결국에 모든 정점 사이의 최단거리를 구하게 된다!
라고 이해했는데 맞을까요?
문제 생각 몇분정도가 좋을까요
0
257
1
self
2
640
1
Two sum
2
338
1
Test_queue 출력 오류
1
548
2
int 범위
2
326
1
시간복잡도
1
1375
1
심화 과정 커리큘럼 질문
1
527
1
Algorithm 3.5 : Print Shortest Path 관련 질문 (플로이드 알고리즘)
0
274
0
코드 중간에 오류 보고 합니다!
1
236
1
쉽지 않네요 ㅠ
0
336
1
분기 한정법과 배낭 문제
0
392
1
배낭문제와 동적계획법
0
511
1
최적 이진검색트리 관계식
0
412
1
n-Queens
0
223
1
큰정수의 계산법 강의에서 몫과 나머지
0
228
1
퀵정렬
0
208
1
1.1알고리즘 이란 에서 교환정렬 파이썬으로 바꿀때
0
304
1
마지막 matrixmult 파라미터 값
0
259
2
내장함수에 언더스코프의 의미
0
648
2
def mergesort(S) 부분이 이해가 가지 않습니다.
0
282
3
이진탐색 vs 합병정렬
1
450
2
분할정복에서 큰 정수 곱셈 다른 계산법?
1
319
1
0번째 왜 자꾸 버리시는건가요?
2
341
1
리스트의 합
0
181
1

