728x90
반응형

 

 

 

 

한빛미디어에서 출간한 이것이 자료구조 알고리즘이다 라는 책은 독자가 마지막 페이지까지 읽는 것을 목표로 기초부터 이해하기 쉽도록 집필해놓은 책이다. 수식은 최소화 하고 한 눈에 들어오는 그림을 많이 넣었다는 글귀는 혹하게 만든다. 개발자들에게 자료구조와 알고리즘이 필수라는 것은 실무를 하면서 매번 느끼고, 간헐적으로 계속 공부를 하게되느 분야인 듯 하다. 먼저, 자료구조란 데이터 보관 방법과 데이터에 관한 연산의 총체를 뜻한다. 흔히들 아는 단순 자료구조로는 int, long, double 등이 있으며, 복합적인 자료구조로는 선형, 비선형 방식에 따라 나뉘어 선형 자료 구조는 배열, 링크드리스터, 스택, 큐, 힙이 있고, 비선형 자료 구조로는 트리 및 그래프가 있다. 자료구조를 공부해야하는 이유는 자료구조 내부를 이해하게 되면 라이브러리에서 엉뚱한 자료구조를 선택하는 일을 피할 수 있고, 동일한 일련의 연산을 사용하더라도 자료구조에 따라 애플리케이션 성능이 크게 달라질 수 있기 때문이다. 또한 자료구조는 알고리즘이 데이터를 효율적으로 사용할 수 있게 도와주는 핵심 부품 역할을 한다. 즉, 자료구조를 모르게 되면 알고리즘을 공부하는데 큰 어려움을 겪을 수 있다. 더 나아가 알고리즘 개념은 어떤 문제를 풀기 위한 단계적 절차를 뜻한다. 이러한 알고리즘을 구현하는데 있어서 자료구조는 필수이고, 또 문제를 효율적으로 풀기위해 최적의 알고리즘을 찾고 개발하는 것이 중요하다고 할 수 있다.

 

1장에서는 리스트 개념을 배우고, 관련된 리스트들(링크드리스트, 더블 링크드 리스트, 환형 링크드 리스트)를 배우고, 2장에서는 스택 개념을 배운다. 3장에서는 입력된 순서대로 데이터를 출력하는 큐에 대해 다루며, 4장에서는 각 노드가 하나 이상의 노드와 연결되는 비선형 자료구조인 트리에 대해 다룬다. 여기서부터 약간 어려워질 수 있으나 이 책에서는 그림을 최대한 많이 사용하여 쉽게 설명하고 있으므로 내용을 이해하는데 어려움은 크게 없다. 5장에서는 정렬을 배운다. 알고리즘에 있어서 정렬은 시간복잡도에 영향을 주로 주는 요인 중 하나이다. 단순 함수를 써서 정렬 할 수도 있겠지만, 기초적인 내용을 배워놔야 응용할 수 있으며, 각 정렬 알고리즘의 성능을 비교하며 공부해놓는 것이 중요할 듯 하다. 6장에서는 탐색 알고리즘에 대해 배우게 된다. 순차탐색, 이진탐색, 이진탐색트리, 레드블랙트리 개념이 있다. 7장에서는 우선순위 큐와 힙 내용에 대해 다룬다. 3장에서 다뤘던 큐와는 달리 선입선출 방식으로 동작하지 않고, 우선 순위에 따라 데이터의 출력 순서가 결정된다. 그 다음 8장에서는 해시 테이블에 대해 다룬다. 이는 알고리즘의 메모리 공간과 관련이 있다. 9장에서는 그래프 개념에 대해 다룬다. 10장에서는 문자열 탐색에 대해 다루는데 문자열 안에 존재하는 특정 단어를 빠르게 찾아내는 것이 목적이다. 처음부터 문자열을 쭉 읽어 문자를 탐색할 수도 있겠지만, 그럴 경우 시간이 너무 오래 걸려서 time out 이 발생할 수 있다. 이러한 문제를 해결하기 위한 방법으로 이 책에서는 가장 뛰어난 성능을 가졌다고 검증된 몇 가지만 선별해서 설명하고 있다.

 

11장 부터 15장 까지는 분할 정복, 동적 계획벅, 탐욕 알고리즘, 백트래킹 등의 알고리즘 설계 기법에 대해 다룬다. 끝판왕 느낌이다. 이를 알아두면 프로그램에 맞지 않는 알고리즘을 재설계하는 시간을 아껴 더 좋은 프로그램을 만드는 일에 집중할 수 있으며, 릿코드나 백준 프로그래밍에서 어려운 알고리즘 문제를 푸는데 가장 기초가 되는 개념이다. 문제를 어떤 알고리즘으로 접근하냐에 따라 시간복잡도, 공간복잡도가 크게 달라질 수 있으므로 이를 잘 설계하는 것이 중요하다. 

 

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
728x90
반응형