이 블로그의 모든 예제코드는 깃허브에서도 볼 수 있습니다. https://github.com/AeroCodeX/
순회 알고리즘(Iterative)의 개념 |
자신이 직접 구했던 이전 값을 기반으로 정답을 계산하며.
순차적으로 계산이 이루어지는 방식.
여기서 순차적이란 용어는 처음부터 정답까지 모든 경우를 차례대로 계산한다는 의미로 사용되었다.
N=10인 경우의 정답을 구하기 위해 N=0, .. ,9인 경우의 정답까지 전부 구해놓는다는 의미이다.
N=10와 전혀 상관없는 케이스의 정답도 전부 구해놓는다.
또한 각 케이스의 결과는 순차적으로 구해지나, 중간결과로써 병렬적으로 계산될 수 있다.
N=0의 결과가 N=1, ..., N 을 계산하는데 필요하다면, 각 공간에 중간값으로써 저장해놓는 것 이다.
아래는 순차적으로 구해지나, 중간결과가 병렬적으로 계산되는 피보나치 함수 알고리즘이다.
각 중간결과를 계속하여 누적함으로써, 각 케이스의 최종결과가 계산되고 있다.
재귀 알고리즘(Recursion)와의 비교 |
- 재귀는 이전값을 얻기 위해, 또 다른 자신을 호출한다.
- 재귀는 순차적으로 계산이 이루어지지 않을 수 있다.
N=10인 경우의 정답을 구하기 위해, 관련된 케이스의 정답만을 계산한다.
N=10의 정답을 구했더라도 N=0, .., 9는 구해지지 않았을 수 있다.
재귀는 이전값을 얻는 과정에서 아래로 인한 성능저하가 발생할 수 있다.
함수호출 오버헤드
중복계산 오버헤드
순회 알고리즘의 성능 |
순회 알고리즘은 재귀에 비해 구현이 어렵고 복잡하지만,
재귀와 달리 호출스택을 많이 소비하지 않고, 불필요한 중복계산을 하지 않는다.
모든 케이스의 결과를 계산하더라도 상당히 빠르다는 것 인데,
한 케이스만 계산하는 재귀보다야 느릴 수 있겠지만,
모든 케이스를 계산하는 재귀에 비해 월등히 빠르다.
예제 # N번째 피보나치 수 |
순회(2)
예제 # N의 약수의 개수 구하기 |
'# 미사용' 카테고리의 다른 글
이분법 (1) (0) | 2018.11.11 |
---|---|
재귀 (0) | 2018.11.11 |
무차별 대입 (0) | 2018.11.11 |
[백준 1011] Fly me to the Alpha Centauri 통찰노트 (0) | 2018.10.22 |
티스토리 깃허브 연동하기 (0) | 2018.10.21 |