즉, ab => ba
예제> n = 8, i = 3 인 경우에 a = 1 2 3, b = 4 5 6 7 8 가 된다.
입력 : 1 2 3 4 5 6 7 8
출력 : 4 5 6 7 8 1 2 3
======================================< 풀 이 >==========================================
private static final int N = 1000000; -> 샘플 길이
reverse 알고리즘
- swap 횟수 : N번
- 수행시간 : 약 10밀리세컨드
배열을 거꾸로 뒤집는다.
juggling action 알고리즘
- 수행 시간 : 약 50 밀리세컨드
최대공약수(Greatest Common Divisor)를 찾는다.
shift 알고리즘
- swap 횟수 : (N-1)*SHIFT
- 수행 시간 : 약 3500밀리세컨드
INPUT을 생성한다.
실험>
조건 1> N = 1000000(백만), SHIFT = 1000
- reverse : 10ms
- juggling action : 52ms
- shift : 3640ms
조건 2> N = 1000000(백만), SHIFT = 10
- reverse : 10ms
- juggling action : 47ms
- shift : 43ms
조건 3> N = 1000000(백만), SHIFT = 5
- reverse : 10ms
- juggling action : 45ms
- shift : 24ms
조건 4> N = 1000000(백만), SHIFT = 1
- reverse : 10ms
- juggling action : 45ms
- shift : 10ms
결과>
reverse 알고리즘은 꾸준한 성능을 보여준다.
jugging action 알고리즘은 꾸준한 성능을 보여주지만 조건에 따라 shift알고리즘보다 성능이 낮기도 한다.
세가지 알고리즘 모두 제한된 메모리를 갖고 있다는 전제조건에서 구상했다.
만일, i만큼의 벡터를 임시변수에 옮긴 후, n-i개의 원소를 i만큼 왼쪽으로 옮긴다음에 x의 뒤쪽에 임시변수를
복사해야 한다면 i만큼의 메모리를 필요로 하게 된다.
reverse알고리즘 동작 원리>
a` = a의 reverse, b` = b의 reverse
(ab)` = b`a` <= 이 법칙은 중고등학교 수학시간에 배웠다.
a b => a` b` => (a` b`)` = ba
참고자료 : 생각하는 프로그래밍 칼럼2
'Computer Science > Algorithm' 카테고리의 다른 글
insertion sort - c (0) | 2011.05.28 |
---|---|
insertion sort - Java (0) | 2011.05.26 |
binary search - Java (0) | 2011.05.17 |
binary search - c (0) | 2011.05.16 |
도형 내부 채우기 (0) | 2011.05.11 |