[Algorithm] 자료구조 기초

서요이·2022년 9월 27일
0

Algorithm

목록 보기
3/4
post-thumbnail

꼭 필요한 자료구조 기초

탐색(Search)이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다
그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다
대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있는데 이 두 알고리즘의 원리를 제대로 이해해야 탐색 문제 유형을 풀 수 있다
기본 자료구조인 스택과 큐에 대한 이해가 전제되어야 한다

자료구조(Data Structure)란 데이터를 표현하고 관리하고 처리하기 위한 구조를 의미한다
그 중 스택과 큐는 자료구조의 기초 개념으로 두 핵심적인 함수로 구성된다

  • 삽입(Push): 데이터를 삽입한다
  • 삭제(Pop): 데이터를 삭제한다

실제로 스택과 큐를 사용할 때는 삽입, 삭제 외에도 오버플로와 언더플로를 고민해야 한다
오버플로는 특정한 자료구조가 수용할 수 있는 데이터의 크기를 이미 가득 채운 상태에서 삽입 연산을 수행할 때 발생한다
언더플로는 특정한 자료구조에 데이터가 전혀 들어있지 않은 상태에서 삭제 연산을 수행할 때 발생한다

스택(Stack): 선입후출(First In Last Out)구조 또는 후입선출(Last In First Out)구조
파이썬에서 스택을 사용할 때에는 별도의 라이브러리를 사용할 필요가 없다
기본 리스트에서 append()와 pop() 메서드를 이용하면 스택 자료구조와 동일하게 작동한다
append() 메서드는 리스트의 가장 뒤쪽에 데이터를 삽입하고, pop() 메서드는 리스트의 가장 뒤쪽에서 데이터를 꺼내기 때문이다

큐(Queue): 선입선출(First In First Out) 구조, 공정한 자료구조
파이썬으로 큐를 구현할 때는 collections 모듈에서 제공하는 deque 자료구조를 활용
deque는 스택과 큐의 장점을 모두 채택한 것으로 데이터를 넣고 빼는 속도가 리스트 자료형에 비해 효율적이며 queue 라이브러리를 이용하는 것보다 더 간단하다
deque 객체를 리스트 자료형으로 변경하고자 한다면 list() 메서드를 이용

재귀 함수(Recursive Function): 자기 자신을 다시 호출하는 함수
보통 파이썬 인터프리터는 호출 횟수 제한이 있는데 이 한계를 벗어나면 오류 발생
무한대로 재귀 호출을 진행할 수 없음
재귀 함수를 문제 풀이에서 사용할 때는 재귀 함수가 언제 끝날지 종료 조건을 꼭 명시해야 한다

컴퓨터 내부에서 재귀 함수의 수행은 스택 자료구조를 이용한다
함수를 계속 호출했을 때 가장 마지막에 호출한 함수가 먼저 수행을 끝내야 그 앞의 함수 호출이 종료되기 때문이다
스택 자료구조를 활용해야 하는 상당수 알고리즘은 재귀 함수를 이용해서 간편하게 구현될 수 있다 (DFS)

반복문 대신에 재귀 함수를 사용했을 때 얻을 수 있는 장점
코드가 간결해짐
재귀 함수가 수학의 점화식(재귀식)을 그대로 소스코드로 옮겼기 때문이다
수학에서 점화식은 특정한 함수를 자신보다 더 작은 변수에 대한 함수와의 관계로 표현한 것을 의미한다
일반적으로 점화식에서 종료 조건을 찾을 수 있음

0개의 댓글