1번은 재귀 분할정복이고 2번은 반복문 분할 정복이다.
1번
def power(n, p):
if p == 0:
return 1
# Call this only once, instead of two times.
power_p_divided_by_2 = power(n, p // 2)
if p % 2:
return n * power_p_divided_by_2 * power_p_divided_by_2
else:
return power_p_divided_by_2 * power_p_divided_by_2
2번
def power(a, n):
ret = 1
while n > 0:
if n % 2 != 0:
ret *= a
a *= a
n //= 2
return ret
'practivceAlgorithm > 자료구조&알고리즘' 카테고리의 다른 글
[알고리즘] sweeping-line 라인 스위핑을 통한 필터링 (0) | 2021.08.30 |
---|---|
[자료구조] 문자열 탐색의 절대강자 Trie (1) | 2021.08.30 |
[알고리즘] Cut Vertex, Cut Edge 단절 점, 단절 선 : sub-tree의 단절 (1) | 2021.08.18 |
[알고리즘] SCC (Strongly Connected Component) 강한 연결 요소 (0) | 2021.08.18 |
[알고리즘] Manacher's 알고리즘 : 원 반경에 따라 펠린드롬 최소길이를 보장 (0) | 2021.08.18 |