inflearn logo
강의

Course

Instructor

Learning Algorithm Basics with Python

플로이드 알고리즘

Resolved

426

hyb9579

7 asked

0

플로이드 알고리즘을 공부하는데 몇가지 이해가 안되는 점이 있습니다.

D의 k승은 k개의 정점을 지나는 최단 경로 길이의 행렬이고,

모든 정점을 지날 수 있는 최단 경로의 길이는 입니다.

즉, D에 주어진 행렬의 크기(길이)만큼 제곱을 해줘야 모든 경우의 수의 최단 경로를 알 수 있다는 것 입니다.

그런데 강의에서 제곱이 아닌 재귀관계식의 형태로 본것이 첫번째로 이해가 잘 되지 않고,

두번째는 제 생각에는 형태로 다른 정점 을 지나면 새로운 경로가 있는 경우가 되야 할것 같은데,

위와 같은 형태로 에서 k가 마치 함수의 매개변수 인것처럼 보이고 승수가 행렬의 인덱스처럼 사용되는 점이 이해가 되지 않습니다.

세번째는 재귀 관계식를 이용해서 을 구해야 최단 경로의 길이를 구할 수 있는데, 로 n번의 연산과정이 있어야 함에도 단 한번의 플로이드 함수를 돌린 리턴값이 가 될 수 있는 이유를 모르겠습니다... 제가 봤을때는 한번 플로이드 함수가 돌리면 하나의 정점을 지난 최단 경로가 나와야 할것 같은데....

이 세가지가 플로이드 알고리즘에서 이해가 되지 않는 부분입니다!

답변 해주시면 감사합니다!

algorithm

Answer 2

0

joonion

네. 정확하게 이해하신 것 같습니다.

0

hyb9579

감사합니다!

0

joonion

1.

D^k는 수학에서의 행렬 거듭제곱과는 무관한 표기법입니다.

W가 인접행렬이고, W=D^0으로 정의할 수 있으며,

D^k는 플로이드 알고리즘에서 k번째 루프를 실행한 시점의 인접행렬로 이해해야 합니다.

2.

위 1번에서 처럼, k가 현재 계산된 경로 길이라고 생각하면

마치 매개변수처럼 사용되는 것은 이해가 가능할 것입니다.

3.

위 1번/2번의 오해를 교정해서 재귀식의 의미를 잘 곱씹어서 생각해 보면

D^n까지 진행하면 모든 쌍의 최단 경로 길이가 계산된 인접행렬을 얻는다는 것을 이해할 수 있습니다.

0

hyb9579

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