728x90
반응형
탐색
탐색은 많은 양의 데이터에서 원하는 데이터를 찾는 과정
대표적인 그래프 탐색 알고리즘에는 dfs와 bfs가 있다
- 굉장히 자주 등장하는 유형
스택
- 선입 후출
- 입구와 출구가 동일한 형태
먼저 입력된 자료가 나중에 출력된다
-> 박스를 쌓는다
삽입과 삭제가 주요 작업
파이썬은 리스트에서
append(), pop() 을 이용하여 쉽게 구현 가능
stack[::-1] -> 최상단 원소부터
stack -> 최하단 원소부터
큐
- 대기열
- 선입 선출
- 한 쪽은 입구 한 쪽은 출구인 형태
que는 list로도 기능은 구현가능하지만 비효율적
from collections import deque
queue = deque()
queue.append(원소)
queue.popleft()
queue.reverse() ## 역순으로
재귀함수
- 함수가 자기 자신을 다시 호출
- 종료 조건이 없으면 최대 깊이 초과 오류 메시지를 출력하게됨
사용자 정의 함수는 stack에 쌓이기 때문에
재귀함수 실행 시 외부 함수가 모두 실행 후
stack의 데이터를 빼내듯 내부 함수가 역순으로 실행된다
팩토리얼
n! = 1 * 2 * 3 * 4 * ... * n
수학적으로 0! 과 1!의 값은 1이다
유클리드 호제법
-> 두 자연수에 대한 최대공약수를 구하는 대표적인 알고리즘
두 자연수 A, B에 대하여 (A > B) A를 B를 나눈 나머지를 R이라고 할 때,
A와 B의 최대 공약수는 B와 R의 최대 공약수와 같다
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a % b)
재귀함수를 잘 활용하면 복잡한 알고리즘을 간결하게 작성 가능
모든 재귀함수는 반복문으로
모든 반복문은 재귀함수로 가능
경우에 따라 어떤 것이 유리한지 달라질 수 있음
사용자 정의 함수는 스택에 계속 쌓인다
-> 스택 라이브러리 대신에 재귀함수를 이용하는 경우가 많다
반응형
'자료구조_알고리즘' 카테고리의 다른 글
알고리즘) 정렬 알고리즘 (0) | 2021.06.05 |
---|---|
알고리즘) DFS(깊이 우선 탐색), BFS(넓이 우선 탐색) (0) | 2021.06.04 |
알고리즘) 구현 - 시뮬레이션, 완전탐색 (0) | 2021.06.02 |
알고리즘) 그리디(탐욕) 알고리즘 (0) | 2021.05.31 |
알고리즘) 성능평가 (0) | 2021.05.30 |
댓글