본문 바로가기

소프트웨어,IT,컴퓨터공학 도서리뷰/알고리즘 & 자료구조

리얼 월드 알고리즘 -파노스 루리다스 지음- 황영숙 옮김 [6/7][책리뷰]

현실 세계의 문제를 해결하는 알고리즘들.

 


 

 

디지털 세상의 힘 : 알고리즘

특정 단계의 일이 고정적(패턴)이라면 21세기인 디지털 세상에서는 알고리즘으로 표현될 수 있다.

 

좀 더 잔인하게 말하자면 수로 표현할 수 있고 고정된 로직으로 운영할 수 있다면

 

그 어떤 것이든 알고리즘으로 변환할 수 있다.

 

여기에 확률을 활용해서 시뮬레이션을 계속 돌릴 수 있다면 우리는 미래에 대하여 더 나은 선택지를 얻을 수도 있다.

 

언어를 번역하고, 날씨를 예측하고, 인간의 움직임을 따라 하는 기계가 나오고, 데이터를 압축하고,

 

주가를 예측하는 로직에 사용하고,

 

디지털 암호화에 사용하고,

 

효율적인 경로를 탐색하고,

 

민주주의 투표 시스템에 질문을 던지고,

 

검색하고, 데이터를 효율적으로 저장하고,

 

문자열을 처리하고,

 

확률을 얻어내고,

 

나아가 기계를 학습시키는 것까지..

 

알고리즘이 사용되지 않은 분야가 없다.

 

그리고 이 책은 그 거대한 영역 뒤편에 존재하는 알고리즘들을 탐구하도록 길을 열어준다.


 

추천도 : 6/7 

★★★★★★☆

 

읽은 기간 📅 : 2021년 7월 30일 ~ 9월 18일

 

이 책을 추천하는 이들 👨‍👧

  • 알고리즘의 실용성을 탐구하고 싶은 사람들.

 

난이도 🦈

이 책의 역자는 정말 고생했을 것 같다.

 

실제 알고리즘의 절차를 세세하게 설명해주는데, 이를 이해하기 위해선 기초적인 프로그래밍 역량이 필요하고

 

수학적인 역량도 필요하다.

 

그래서 난이도가 상당히 높다고 생각한다. [ 나의 경우 난이도가 높은 알고리즘은 그냥 읽고 넘겼다. ]

 

관련된 책들 📚

  1. 존 맥코믹의 미래를 바꾼 아홉가지 알고리즘 (교양적인 측면)

 

한 줄 평 ✍️

기계의 힘으로 끌어올린 수학의 힘. 수학이 세상을 바꾸는 시대가 왔다.


"고통의 리듬"

P9.에 이러한 글이 나온다.

 

알고스(Algos)가 고통을 뜻하는 그리스어이므로, 알고리즘(algorithm) 대신에 알고리듬(algorhythm)이라고 쓴다면

 

여러분은 "고통의 리듬"을 의미하는 합성어를 사용하는 것이 됩니다. [ 저자의 언어적 유희 ]

 

물론 알고리즘이라는 표현은 유명한 페르시아의 수학자이자 천문학자이며 지리학자이기도 한 알-콰리즈미의 이름에서 유래한 것이다. 

 

개인적으로 고통의 리듬이라고 생각하며 알고리즘을 공부하면 지식의 무게(인내)를 견디는 맛을 느끼게 해준다.

 

고통 뒤의 달콤함이 더 달듯이, 알고리즘을 이해하고 실제 응용하거나 자신의 문제를 해결했을 때 그 결실의 달콤함을 더해준기 때문.

 

그런 점에서 "고통의 리듬"으로 알고리즘을 받아들이는 것은 나쁘지 않은 태도 같기도 하다.

 

이 책은 놀랍게도 비전공자를 대상으로 쓰인 책이라고 한다.

 

상당히 놀라웠다.

 

관련된 책으로 뽑은 존 맥코믹의 "미래를 바꾼 아홉 가지 알고리즘"은 확실히 비전공자도 재밌게 읽어볼 수 있는 책으로 생각된다.

 

세세한 알고리즘보다는 메타포를 활용해서 알고리즘을 추상적으로 이해할 수 있게끔

 

알고리즘의 어려움을 가능한 가볍게 이끌어가기 때문이다.

 

반면의 이 책은 각 장마다 특정 문제 영역을 드러내고(문제의 영역마저도 친숙한 영역은 아니다.), 그 문제를 수학적으로

 

해결할 수 있는 방법을 언급하며 이에 대하여 프로그래밍 언어로 번역될 수 있도록

 

추상적인 단계를 표현한 코딩 방식인 수도 코드를 보여준다.

 

이후 작은 케이스에 대해서 실제 알고리즘이 거치는 과정을 세세하게 설명해준다.

 

이후 심화적인 내용을 들어가고, 더 깊은 내용은 참고자료로 안내하며 실용적인 공부는 연습문제로 남겨준다.

 

전공자임에도 불구하고 나는 이 책을 상당히 어렵게 봤다.

 

힙 자료구조, 트리 자료구조, 그래프 구조는 일반 개발자도 상당히 까다롭게 여기는 자료구조이다. 

 

이 책의 많은 부분은 위의 자료구조로 활용되는 알고리즘들을 설명한다.

(혹은 다분하게 수학적인 로직으로 처리되는 알고리즘)

 

나는 이 책에 나온 나온 알고리즘의 절반을 눈으로 따라가기만 하고 넘겼다. (시간적인 여유가 없었다.)

 

그렇기에 이 책을 읽는다면 융통성을 발휘해야 할지도 모른다.

 

내가 이해하기에는 너무도 큰 벽처럼 느껴진다면 가볍게 넘기고

 

응용 분야와 해당 알고리즘으로 어떻게 문제를 해결했는지에 집중해보는 것이 좋을 듯하다.

 

이 책은 결코 기술적이지 않은 책이며, 현실세계에서 활용되는 알고리즘을 전문적으로 탐구해보는 책이라고 보면 될 것이다. 알고리즘의 역사, 배경, 효율성 등등이 매력이 있는 부분이 될 것이다.

 


나중에 시간이 되면 이 책에 나온 수도 코드를 알고리즘으로 구현해보고 싶다.

 

알고리즘 코딩 테스트에 도움이 될까 싶어 읽었던 책인데.. 코딩 테스트보다는

 

알고리즘의 활용 범위나 개념 형성에 더 큰 도움이 되었다.

 

이 책의 가장 큰 매력은 간결하게 만들어진 수도 코드에 있다.

 

프로그래밍 언어의 문법에 종속되지 않고 순수하게 로직의 단계만을 추상적으로 표현하는 수도 코드.

 

그래서 모든 프로그래머가 쉽게 이해할 수 있는 코드.

 

이 책에 모든 알고리즘은 수도 코드로 표현된다.

 

그래서 실제 프로그래밍 언어로 구현해보면서 이 책의 알고리즘들을 음미해보고 싶었다.

 

하지만 늘 그렇듯 그럴 여유로운 시간이 없다.

 

빨리 코딩 테스트를 준비해야 했고, 이 책에서 이해가 되지 않는 부분들을 빠르게 넘기며 읽어나갔다.

 

이 책을 진짜로 공부한다면 6~8개월 정도는 걸리지 않을까 한다.

 

탐색, 암호, 압축, 문자열, 라우팅 및 중개, 중요도, 검색, 최단 경로, 결정 사안에 대한 가중치 부여, 분류 등등

[현실세계의 문제를 해결하기 위해서 코어단에서 개발되는 영역들의 알고리즘들이 대부분이다.]

 

알고리즘이 활용되는 대부분의 영역을 탐구해볼 수 있어서 좋았던 책이다. 

 

가장 인상 깊었던 부분은 마지막 장의 "운에 맡기기" 파트!

 

컴퓨터로 무작위성을 구현하는 것은 불가능해서 실제 불확실성의 성질을 가진

 

현실세계의 물리적인 속성을 지닌 물체를 이용해서 난수를 생성한다는 파트..

 

인간이 만들어낸 절대적으로 논리적인 세상인 디지털 세계에서도 만들 수가 없는 성질이라는게 있구나라는 것을 느끼게 만든 장이기도 하며,

 

난수로 활용될 수 있을 정도로 완벽하게 불확실성을 가진 현실세계의 특징을 강하게 느끼게 해 준 부분이었다.

 

앞으로 이 책을 읽을 시간을 코딩테스트에 투자하게 될 듯하다.

 

꼼꼼하게 책을 번역해주신 황역숙 옮긴이분에게 감사를 표한다.

 

첫 번역책이라는것이 상당히 놀랍다.

 

알고리즘의 코어를 개발하고 있다면 이 책을 읽어보는 것을 강력하게 권장한다!

 

 

반응형