일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- windosws wbcs
- level13
- Stack
- 정렬 알고리즘
- C
- OSI
- 파이썬
- 재귀
- 백준
- SWiFT
- 시간복잡도
- Java
- 파일 시스템
- 두근두근 자료구조
- HTML
- 암호수학
- War Game
- ftz
- 자료구조
- System
- 미로 탐색 알고리즘
- pwnable.kr
- 큐
- ftz level13
- LoB
- windosw 문자열
- web
- c언어
- PHP
- 스택
Archives
- Today
- Total
나의 기록, 현진록
[Swift] Data Structure divide and conquer, D&C / power / 자료구조 분할정복 / 거듭제곱 계산 본문
Programming/Algorithm & Data Structure
[Swift] Data Structure divide and conquer, D&C / power / 자료구조 분할정복 / 거듭제곱 계산
guswlsdk 2021. 7. 6. 11:41반응형
[분할정복]
x의 n승 거듭제곱을 하기 위한 함수를 작성하였다. recursion을 생각하지 않고 작성한다면 다음과 같이 작성할 것이다.
func slow_power(_ x: Double, _ n: Int) -> Double{
var result = 1.0
for i in 0..<n{
result = result * x
}
return result
}
순환의 개념을 사용하여 효율적으로 거듭제곱을 구하는 함수를 작성해보자.
func fast_power(_ x: Double, _ n: Int) -> Double{
if n == 0{
return 1.0
}
else if n%2 == 0 { //n이 짝수
return fast_power(x*x, n/2)
}
else{ //n이 홀수
return x*fast_power(x*x, (n-1)/2)
}
}
n이 짝수인 경우에 x 제곱을 먼저 계산한 후에 이 값을 n/2승 하는 것이다.
n이 홀수인 경우에 x 제곱을 (n-1)/2승하고 여기에 x를 곱해준다.
이 경우에는 n -> n/2 -> n/4 승이 되면서 함수가 1회 진행될 때마다 문제가 하나씩 줄어드는 게 아닌 절반씩 줄어든다. slow_power보다 매우 효율적이라고 할 수 있겠다.
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] Data Structure recursion / hanoi / 자료구조 순환, 재귀 / 하노이 탑 (0) | 2021.07.08 |
---|---|
[Swift] Data Structure Recursion / Fibonacci / 자료구조 재귀, 순환 / 피보나치 수열 (0) | 2021.07.07 |
[Swift] Data Structure recursion / divide and conquer, D&C / 자료구조 순환, 재귀 / 분할정복 (0) | 2021.07.06 |
[Swift] 백준 1012 유기농 배추 / DFS (0) | 2021.06.30 |
[Swift] Data Structure/maze search/BFS/queue/미로 탐색/너비우선탐색/큐 (0) | 2021.06.30 |