|
‘그림으로 정리한 알고리즘과 자료구조’는 그림과 함께 수록한 알고리즘 책이다. 책에는 자료구조와 알고리즘에 대한 개괄이 담겨있다. 자료구조의 기본인 배열, 연결 리스트, 스택, 큐, 트리 등과 알고리즘의 기본이라 할 수 있는 정렬과 검색 알고리즘을 살펴보고, 실제로 사용하고 있는 유명한 알고리즘들을 소개한다. 책의 특징이라면 제목처럼 그림을 사용해 쉽게 이해할 수 있도록 유도한다는 점이다. 편집도 꽤 잘한 편이다. 그래서 알고리즘이라고 하면 복잡하고 어렵다고 생각하기 쉬운데, 그걸 너무 딱딱하지 않게 볼 수 있도록 꽤 잘 구성했다. 많이 사용하는 언어 중 하나인 Java와 Python을 이용한 구현 예를 보인 것도 좋다. 그러나 제목처럼 ‘그림으로 정리했다’고 하기는 좀 애매하다. 여타의 알고리즘 책이 보여줬던 삽화 사용에서 크게 벗어나 보이진 않기 때문이다. 알고리즘 책이라면 가능한 그림을 활용한다. 그게 설명을 훨씬 쉽게 하기 때문이다. 오히려 그림을 쓰지 않는 책이 거의 없을 정도다. 그래서 이 책은 만화 정도로 훨씬 더 그림을 적극적으로 활용할줄 알았는데, 원리에 대한 설명이 필요해서 그랬는지 생각보다 그림의 비율이 높진 않았다. 초보자를 위한 다른 알고리즘 책과 비교해도 그렇다. 내용, 분량 때문인지, 설명이 부족한게 꽤 있었다. 예를 들어, KMP 알고리즘 소개가 그렇다. 간단하게 원리와 코드를 소개했는데, 이 알고리즘은 기본 원리만큼이나 구현 방법도 중요하다. 즉, 겹치는 부분이 있음을 판단하기 위한 로직도 중요한데, 그에 대해서는 별 다른 설명없이 바로 코드로 넘어가버리기 때문에 대체 왜 이런 코드를 만든 만든 것인지, 이 코드는 무엇을 얻기 위한 것인지를 그저 유추할 수밖에 없다. 알고리즘 책으로서는 분명 아쉬운 점이다. 문제는 180여 쪽밖에 되지 않는 분량에 너무 여러가지 것들을 담으려고 했다는 거다. 그래서 알고리즘을 자세히 들여다보고 이해할 수 있는 책이라기 보다는, 알고리즘의 기본과 여러 알고리즘들을 살펴보는데 그치고 만 느낌이 든다. 기왕 그럴거였으면 차라리 훨씬 더 만화처럼 가벼운 책으로 만드는게 낫지 않았을까. 내용과 구성면에서 좀 아쉬운 책이다. |
|
책을 펴니 책이 그림으로 가득 차 있네요. 대부분 다양한 알고리즘과 자료구조에 대한 내용이에요. 예전에 정보처리 기사 등을 공부할 때는 거의 글로만 빡빡히 적혀 있는 책을 보았는데 이렇게 칼라로 된 그림들로 잘 정리된 책을 보니 가슴이 시원해지는 느낌이에요. 예쁘게 잘 정리된 그림으로 보니 한 눈에 그 구조가 쏙 들어와요. 물론 그림으로 쉽게 정리되어 있다고 해서 알고리즘이나 자료구조가 눈으로만 익힐 수 있는 것은 아니지요. 꾸준하게 프로그래밍하고 시행착오를 거쳐서 자신의 것으로 만들어야 비로서 제대로 된 프로그래밍을 할 수 있을 거예요. 이 책은 184페이지 밖에 되지 않지만 내용이 엄청나게 꽉 차있는 느낌이에요. 총 8개의 장으로 구성되어 있는데 1장과 2장은 가각 컴퓨터와 알고리즘에 대한 기초에 대해서 설명하고 있어요. 3장에서부터 본격적으로 알고리즘에 대해서 설명하고 있고 4장은 자료구조에 대한 기본을 정리해 놓았어요. 그리고 5장부터 본격적으로 알고리즘을 설명하고 있는데요. 5장의 정렬 알고리즘으로부터 시작해서 6장의 검색 알고리즘, 7장에서는 웹 검색 알고리즘을 비롯해서 컴퓨터 역사에 남을 유명한 알고리즘들을 소개하고 있어요. 마지막 8장에서는 알고리즘의 우수함을 식별하는 기준과 알고리즘 표기 방법 등 알고리즘 활용을 위한 추가 지식을 알려주고 있어요. 이 책은 이처럼 이론과 그림을 통해 배운 알고리즘과 자료구조를 자바와 파이썬 예제 소스를 통해 하나씩 코딩하며 어떻게 문제를 해결하는지 이해할 수 있도록 짜여져 있어요. 구체적으로 이론 → 그림 → 예제 소스로 이어지는 구성을 통해 알고리즘과 자료구조 개념을 확실히 다지며 응용력을 키울 수 있게 해놓았네요. 그동안 머리에 잘 들어오지 않는 어려운 알고리즘 책으로 고생했는데 이 책을 통해서 이번에는 알고리즘을 제대로 익혀볼 수 있을까 하는 기대를 가졌는데 기대에 어느 정도 부응하는 책이라고 생각해요. 알고리즘을 배워보고 싶은데, 관련된 책들이 대개 너무 난해해보여서 눈이 가지를 않았어요. 그런데 이 책은 철저하게 그래픽 위주라 저절로 눈이 가네요. 현대인에게 필수라는 코딩과 이에 필요한 알고리즘을 이번 기회에 제대로 배워보려고 해요.
|
|
컴퓨터공학에 관심있는 사람에게는 교과서 같은 책일 것 같아요. 알고리즘에 대한 내용뿐 아니라 컴퓨터에 대한 기본 개념과 원리부터 차근차근 설명하는 방식이라서 처음 배우는 사람에게 도움이 되는 책이에요. 책의 구성이 깔끔해요. 우선 이 책으로 어떻게 공부해야 하는지 방법을 7 step으로 알려줘요. 1 step : 컴퓨터가 어떻게 개발되었는지 컴퓨터의 구성 원리가 무엇인지 파악하기 2 step : 알고리즘이란 무엇인지 이해하기 3 step : 다양한 예제를 통해 주어진 과제를 해결하는 연습하기 (알고리즘의 개발) 4 step : 알고리즘의 개발 및 구현에 필요한 다양한 데이터 처리 기술 익히기 (자료구조의 이해) 5 step : 알고리즘의 개발에 기초가 되는 정렬 및 검색 알고리즘에 대한 모든 것을 알아보고 자바와 파이썬 구현하기 6 step : 현재 가장 많이 사용되는 검색 알고리즘을 그림을 통해 내용 파악하기 7 step : 컴퓨터 역사에 남을 유명한 알고리즘 내용과 알고리즘 활용을 위한 추가 지식을 공부하기 교과서처럼 개념 설명 후 파이썬과 자바를 이용해 해당 알고리즘을 구현해볼 수 있어요. 소스는 정보문화사 홈페이지(http://www.jinfopub.co.kr)에서 다운로드하여 실습할 수 있어요. 각 장에서 학습한 내용은 [Note]와 [요약] 부분에서 다시 한번 정리하면서 개념 정리를 할 수 있어요. 알고리즘은 계속 진화합니다. 예전에는 검색이나 정렬이 알고리즘에서 중요한 위치를 차지했지만, 이제는 검색이나 정렬은 어느 정도 최적화된 분야라고 할 수 있습니다. 최근에는 검색이나 정렬보다 실제 컴퓨터 활용 단계에서 수행되어야 하는 작업에 대한 알고리즘이 중요해지고 있다고 합니다. 그 대표적인 예가 구글의 '랭킹 알고리즘'입니다. 알고리즘의 우수함을 식별하는 기준은 정확성, 작업량, 메모리 사용량, 단순성, 최적성입니다. 얼마나 정확하게 동작하고, 적은 연산을 수행하며, 적은 메모리를 사용하는지, 또한 알고리즘의 순서가 얼마나 단순하며, 최적화되어 있는지를 따져봅니다. 이 책을 알고리즘과 자료구조의 기본을 배울 수 있는 교재입니다. 알고리즘 공부에 도움이 되는 웹 사이트에서 매일 문제를 하나씩 풀어가는 훈련이 중요하다고 합니다. 알고리즘에 익숙해져야 프로그래밍 능력도 향상됩니다. 저자의 마지막 당부는 너무 어려운 알고리즘 문제에 매달리지 말라는 것입니다. 실제 사용 환경에서는 어려운 상황이 자주 발생하지 않으니까, 알고리즘에 대한 흥미를 잃지 않는 선에서 알고리즘 공부를 하라는 것입니다. 아무리 쉽게 설명해도 단번에 이해할 수 있는 건 아니니까, 차근차근 익혀가면 좋을 것 같습니다. |
|
컴퓨터 언어는 이미 영어처럼 보편화되어 초중고학생의 기본 교과로 편재될 준비를 하고 있으며, 대학에서 컴퓨터학과를 제외하고 다양한 이공계와 때로는 문과에서도 기계어 학습을 하고 있다. |
|
알고리즘은 공대를 다니는 사람들이라면 중요한 영역입니다. 예전 정보처리기사 시험에서도 알고리즘 영역이 높은 배점으로 포함되어 있을 정도 입니다. 알고리즘은 주어진 문제를 해결하기 위한 절차로서, 정해진 입력에 정해진 출력이 나와야 하고, 무한히 반복되어서는 안됩니다. 알고리즘 종류에는 크게 4가지로 볼수 있습니다. 첫째 정렬 - 한 줄로 모여 있는 데이터를 오름차순이나 내림차순으로 배치하는 방법입니다. 예로 단순 정렬, 선택 정렬, 퀵 정렬 등이 있습니다. 둘째 검색 - 데이터 중에서 원하는 것을 찾아내는 방법입니다. 예로 순차 검색, 이진 검색 등이 있습니다. 셋째 문자열 패턴 매칭 - 주어진 문자열에서 지정한 문자열과 일치하는 부분을 찾아내는 방법입니다. 예로 문자열검색, KMP 검색, BM 검색 등이 있습니다. 넷째 계산 - 수학이나 공학의 문제 해결을 위한 방법입니다. 예로 최단 경로 찾기, 방정식 풀기 등이 있습니다. 알고리즘 표현방법에는 다양한 방식으로 표현 하고 있지만 가장 많이 사용하는 방법은 흐름도를 사용하는 것입니다. 즉 Flow Chart를 이용합니다. 주어진 과제의 수행을 위해 단위 작업을 어떻게 수행 할 것인지를 결정하는 과정입니다. 이 과정이 끝나면 코드로 변화해서 적용시키면 됩니다. 큰 규모의 프로그램은 구조화 단계를 거쳐서 구성됩니다. 알고리즘 구현하고 자세히 알기 위해서는 자료구조를 알아야 합니다. 자료구조는 컴퓨터가 다루어야 하는 자료가 많은 경우에, 이것을 다루는 방법으로 알고리즘을 구현하는 데 사용합니다.자료구조를 구현하는 방법에는 리스트와 연결 리스트가 있습니다. 리스트는 각 데이터를 연이어 저장하는 기술이고 연결 리스트는 각 데이터를 임의의 위치에 저장하고 서로를 연결하는 기술입니다. 자료구조 - 단순구조 - 2진수, 정수,실수, 문자, 문자열 - 선형구조 - 리스트, 연결리스트, 데크,스택, 큐 - 비선형구조 - 트리(일반트리, 이진트리), 그래프(방향그래프, 무방향 그래프) - 파일구조 - 순차파일, 색일파일, 직접파일 형태로 구성되어 있습니다. 알고리즘은 계속 진화하고 있습니다. 검색이나 정렬이 알고리즘에서 중요한 위치를 자치하던 시절도 있었지만, 이제는 검색이나 정렬은 어느 정도 최적회 된 분야라고 할 수 있습니다. 그래서 실제 컴퓨터 활용 단계에서 수행되어야 하는 작업에 대한 알고리즘이 중요해지고 그 예가 구글의 랭킹 알고리즘 입니다. 선택된 페이지를 대상으로 어떤 페이지가 고객의 요구에 더욱 부합하는 것인지 결정하는 랭킹 알고리즘이 뜨고 있습니다. 인공지능과 빅데이터 등 4차산업혁명의 키워드는 알고리즘 기반으로 돌아갑니다. 남들보다 앞서고 4차산업에 핵심이 되기 위해서 알고리즘에 대해 열심히 공부하고 익히는데 시간을 투자하여야 합니다. |
|
가볍게 필요한 내용만 익힐 수 있는 점이 마음에 든다. |
|
컴퓨터 프로그래밍을 하려면 프로그래밍 언어만 알면 되는 줄 알았었다. 하지만, 어떤 프로그램을 만들 것인지, 이를 구현하기 위해서는 단계별로 어떤 일을 해야 하는지를 먼저 정해야 프로그래밍을 할 수 있음을 알게 되었으며, 이와 같은 작업을 알고리즘임을 알게 되었다. 컴퓨터에서 알고리즘은 작업해야 할 내용을 분류하고 처리하는 순서를 정하는 것이며, 다양한 알고리즘에 대해 알고 있어야 이를 바탕으로 프로그래밍 작업을 할 수 있다는 것을 <그림으로 정리한 알고리즘과 자료구조>를 통해 배울 수 있었다. 책의 도입부에서 컴퓨터가 어떻게 발명이 되었으며 발전되어 왔는지, 컴퓨터의 작동원리와 알고리즘이 무엇인가를 소개하고 있는데, 컴퓨터의 역사에 대해 접할 일이 없었다보니 흥미진진했다. 본격적으로 알고리즘이 무엇인지 알기에 앞서 컴퓨터가 입력받는 자료형태가 무엇인지, 자료들의 구조는 어떤 구조들이 있으며, 이를 어떻게 구현할 수 있는지 프로그래밍 예시가 소개되어 있어 알고리즘 만큼 자료의 특성과 구조를 이해하는 일이 먼저임을 배울 수 있었다. 7장에서 컴퓨터 역사에 남을 유명한 알고리즘이 소개되어 있는 부분이 흥미진진했다. 프로그래밍을 전문적으로 공부하지 않았기 때문에 책에 소개된 프로그래밍 예시들을 직접 입력해며 깊이 있게 공부하지는 못했지만, 알고리즘과 자료구조를 제대로 알고 있어야 프로그래밍을 할 수 있음을 배울 수 있었기에 프로그래밍을 공부하는 이들에게 꼭 필요한 내용으로 구성된 책임을 확인할 수 있었다.
|
|
학교 전공서적처럼 어려운 책이 아니라, 개념마다 아주 쉽게 설명해놓은 책이었습니다. 그리고 간단한 설명과 예제로 되어 있어 아주 이해하기 좋았습니다. 그리고 각각이 작은 챕터로 나누어져 있어서 거의 한페이지 또는 두페이지 수준이었기 때문에, 진도가 넘어가는 재미가 쏠쏠했습니다. 파이썬이 요즘 업무를 자동화하느라 대세인 프로그래밍 언어인 것 같습니다. 저 개인적으로는 시간이 오래걸리는 작업을 간편하게 하기위한 업무 자동화의 용도로 사용중이지만, 데이터를 취급하는 전문적인 분석이나 그런 분야에 파이썬이 쓰이는 것으로 알고 있습니다. 앞으로 배우면 다양한 목적으로 이용될 수 있을 것 같아 기대가 됩니다. 그런데 이 책을 읽게 되어 마침 필요했던 지식을 습득할 수 있게 되어 정말 좋았습니다. 코딩을 하면서 자연스럽게 배우게 되는 스킬도 있겠지만, 자료구조와 같이 필수적으로 기초를 다지는데에는 이 책이 딱 좋았던 것 같습니다. 그래서 컴퓨터를 전공하는 학생들은 필수적인 전공 수업으로 알고 있는데, 저처럼 직장인이면서 코딩을 다시 하려고 하는 분들에게도 복습하는 의미에서 정말 좋은 책이 될 것 같습니다. 앞으로 4차산업 시대에는 코딩이 중요한 교양이 될 것 같다는 생각이 듭니다. 데이터를 취급해야하는 산업이 앞으로 더욱 발전해갈텐데, 그런 의미에서 어린 학생들에게도 학습할만한 책이라고 권하고 싶습니다.
|
|
바야흐로 4차 산업혁명시대다. 4차 산업혁명시대가 왔다고 해서 갑자기 여러 가지들이 생겨나는 것이 아니라 있는 것들에 대해 공부하고 익혀나가야 대비가 될 것으로 보인다. 특히 컴퓨터의 경우 익혀야 할 것들이 많다. 이제 다가오고 있는 시대는 컴퓨터를 모르고서는 살아갈 수 없는 시대가 될 것이기 때문이다. 컴퓨터를 잘 알지 못하든 알고 있든 어떤 개념이 있을 때 그림으로 정리를 한 번 해 보면 훨씬 쉽게 정리할 수 있는 것은 사실이다. 알고리즘이라는 말을 사전에 찾아보았다. 어떤 문제를 해결하기 위한 절차, 방법, 명령어들의 집합이라는 해석이 나왔다. 어떤 문제를 해결하기 위한 방법들이라니 흥미가 생긴다. 이 책은 JAVA와 PYTHON예제로 익혀보는 알고리즘의 프로그래밍을 배워 보는 것이 목적이다. 표지부터 사람의 뇌처럼 생긴 그림이 보인다. 글쓴이인 중앙대학교 조민호 교수는 25년간이나 컴퓨터 관련 실무를 처리해 왔단다. 꾸준히 컴퓨터에 대한 연구와 실무를 익혀온 모습에 책에 대한 믿음감이 간다. 8개의 챕터로 나눠진 이 책은 알고리즘에 대한 내용을 종류별로 잘 정리해 두었다. 특이하게도 이 책을 보고 공부하는 방법이 처음에 나와 있다. 컴퓨터의 구성 원리부터 다양한 예제를 통해 주어진 과제를 해결하는 연습을 하게 된다. 그다음 알고리즘의 개발 및 구현에 필요한 다양한 데이터 처리 기술을 익힐 수 있단다. 이 책의 장점이 여기에 있는 것 같다. 예제들을 통해 실전에서는 어떻게 활용할 수 있는지 확실하게 알려주고 있어 도움이 많이 될 것 같다.
알고리즘으로 본격적으로 들어간 내용 중에는 정렬 알고리즘이 가장 인상 깊었다. 정렬 알고리즘의 종류도 정말 여러 가지가 있었는데 차곡차곡 늘어선 알고리즘의 그림을 보고 나니 알고리즘을 확실하게 익히면 많은 도움이 될 것 같다는 생각이 들었다. 이 책은 보기도 쉽고 공부하기도 쉽게 목차별로 잘 정리가 되어 있어서 하루하루 공부하기 좋을 것 같다. |
|
*1. 출판사에서 책을 제공받아 쓴 서평입니다. |