The Third Chimpanzee

The Third Chimpanzee

이 책을 처음 읽기 시작할 때가 3월 이었던 것 같은데 이제서야 다 읽게 된다. 회사 일을 생각하느라 시간을 내기가 좀 어려웠던 부분도 있지만 나의 게으름이 시간이 오래걸린 가장 큰 이유가 아닐까 싶다. 제러드 다이아몬드의 책을 처음 만난 것은 대변동을 읽고서다. 인류에 대한 대 서사를 이야기하는 것 같아 스케일이 크고 읽고나면 울림이 큰 책이었는데 이 책 또한 많은 것을 생각하게 한다. 책 초반부에 침팬지가 동물원 우리에 갖혀 있는 상황을 설명하는 대목에서 우리와 유전적으로 거의 동일한 동물임에도 더욱이 같은 조상을 하고 있는…

Read More Read More

Concurrency and parallelism

Concurrency and parallelism

We need to clarify an important point. Concurrency and parallelism are two concepts that are often confused, leading to misunderstandings. Parallel means that two or more tasks are executed at the same time. This is possible only if the CPU supports it, requiring multiple cores to achieve parallelism. However, modern CPUs are typically multi-core, and single-core CPUs are largely outdated and no longer widely used, as they are significantly outperformed by multi-core ones. This shift is because modern applications are designed to…

Read More Read More

알쓸코기: 알아두면 쓸데있는 코딩기술 – Generic

알쓸코기: 알아두면 쓸데있는 코딩기술 – Generic

개발을 하다보면 비슷한 구조나 패턴의 코드가 반복되는 경우를 많이 겪을 것이다. 이런 상황에서 좀더 깔끔하고 간략하게 코드를 정리하고 싶은데 딱히 떠오르지 않는다면 Java의 Generic이 해결책이 될 수 있다. 사실 대부분의 Java 개발자라면 Generic에 대해서 어느정도 알고 있으리라 생각된다. 특히 Collection의 클래스나 Stream의 경우 Generic을 활용하기 때문에 익숙할 것으로 생각된다. 하지만 이런 Generic을 이용하여 템플릿 형태의 메소드나 클래스를 직접 제작하거나 활용하는 경우는 그리 많지 않을 것이다. 이 글에서는 Generic을 활용하여 코드의 간결성과 재사용성을 높이는 방법에 대해 소개하고자 한다. 이전 글에서는 경로탐색을…

Read More Read More

알쓸코기: 알아두면 쓸데있는 코딩기술 – Deque

알쓸코기: 알아두면 쓸데있는 코딩기술 – Deque

개발을 하다보면 어떤 자료구조를 사용하느냐에 따라 성능이 크게 달리지는 경우가 있다. 그리고 느린 성능으로 인해 사후에 원인을 분석하고 해결하려면 생각보다 많은 시간과 비용이 소모된다는 것은 대부분의 개발자들은 알고 있을 것이다. 이를 미연에 방지할 수 있는 가장 쉬운 방법은 개발 과정에서 어플리케이션의 성격과 구조를 충분히 이해하고 그 상황과 궁합이 가장 잘 맞는 자료구조를 선택하는 것이라 할 수 있다. 이런 생각까지 닿으면 명장의 목수가 연장을 자유자재로 다루듯 자료구조를 적절하게 선택, 적용하는 능력은 개발자들에게는 필수 요건이라 할 수 있다. 일반적으로 Java에서 List형태의 자료구조를…

Read More Read More

Get to know the Contraction Hierarchy

Get to know the Contraction Hierarchy

앞서 길찾기 알고리즘 관련해서 2개의 알고리즘(Dijkstra, BidirectionalDijkstra)에 대해 살펴봤다. 컴퓨터를 활용하여 길을 찾아가는 알고리즘의 목적은 크게 최적의 경로를 최대한 빨리 찾아내는 것이라 할 수 있다. 이론적으로 이들 알고리즘은 최적의 경로를 찾아주는 것을 보장하지만 최대한 빨리 찾는 것에는 한계를 드러내고 있다. 앞에서 설명한 BidirectionalDijkstra 알고리즘도 이런 맥락에서 탐색속도를 개선하기 위한 하나의 방법으로 볼 수 있다. 이처럼 Dijkstra Algorithm의 탐색 속도는 탐색공간 크기에 종속적일 수 밖에 없으며 나아가 길찾기가 한 국가를 넘어 글로벌 규모로 확대해 나간다면 탐색 속도는 서비스 경쟁력을 유지에 중요한…

Read More Read More

Replacement of our cells

Replacement of our cells

Regular replacement also happens inside us. We constantly replace many of our cells: once every few days for the cells lining our intestines, for example, and once every four months for our red blood cells. To keep damaged molecules from building up in our bodies, our protein molecules are replaced, too. You may look the same in the mirror today as you did in a photo taken a month ago, but many of the individual molecules forming your body are…

Read More Read More

흰구름처럼 피어나는 조팝꽃

흰구름처럼 피어나는 조팝꽃

조팝나무는 우리나라 전역의 산과 들에서 흔히 자라는 나무다. 흰색의 작은 꽃이 다닥다닥 피어 있는 가지들이 모여 봄바람에 살랑거리기 때문에 멀리서 보면 흰 구름이나 솜덩이처럼 생겼다. 봄에 시골길을 가다 보면 산기슭은 물론 밭둑에도 무더기로 피어 있고, 낮은 담장이나 울타리를 따라 심어놓기도 했다. 풍성한 꽃이 보기 좋아 공원에 조경용으로 심어 놓은 것도 흔히 볼 수 있다. 특히 바람이 불 때 함께 오는 조팝나무 꽃향기는 참 좋다. 조팝은 키 1~2m 정도로 자라는 떨기나무(관목)인데 꽃을 자세히 보면 튀긴 좁쌀을 다닥다닥 붙여 놓은 모양이다. 그래서…

Read More Read More

Understanding Bidirectional Dijkstra Algorithm

Understanding Bidirectional Dijkstra Algorithm

Dijkstra Algorithm은 내비게이션의 길찾기 뿐만 아니라 최단거리를 찾는 알고리즘으로 잘 알려져 있다. Dijkstra Algorithm은 출발지와 목적지 사이의 최단 거리 탐색을 보장하긴 하지만 탐색 거리가 멀면 멀수록 소요되는 시간도 비례적으로 증가한다는 것이 맹점이다. 이런 문제점을 해결하기 위해 다양한 방법들이 시도 되었으며 그 중 대표적인 것이 A*와 양방향 탐색이라 할 수 있다. 이 글에서는 내비게이션 업계에서 주로 적용하고 A*알고리즘보다 최적 경로 탐색을 보장하면서 탐색시간을 거의 절반으로 줄일 수 있는 양방향 탐색(Bidirectional Dijkstra Algorithm)을 자세히 알아보고자 한다. 참고로 Dijkstra Algorithm에 대해 이해가 필요하다면…

Read More Read More

Implementing Mutable PriorityQueue

Implementing Mutable PriorityQueue

내비게이션 경로탐색 알고리즘으로 가장 잘 알려져 있고 많이 이용하는 알고리즘이 Dijkstra 알고리즘이다. 알고리즘 수행 결과로 만들어진 경로는 최단거리를 제외하면 빠른경로/운전하기 편한 경로와 같이 정성적으로 판단하는 부분이 많다. 이와 같은 척도를 제외하면 경로탐색 엔진의 품질을 측정하는 중요한 척도는 경로탐색 과정에서 소요되는 시간일 것이다.  Dijkstra 알고리즘을 이용하면 최적의 경로를 찾긴 하지만 탐색시간이라는 비용을 지불해야 한다. 내비게이션 품질에서 탐색시간이라는 비용을 줄이기 위해 A*와 같이 탐색공간(Search Space)을 줄이는 Heuristic 기법들을 많이 활용하고 있으며 최근에는 개념을 바꿔 전처리(Preprocessing) 단계를 이용하여 좀 더 교통공학적으로 접근하여 탐색속도를 개선하려는…

Read More Read More

연애 한 번 못해 보는 꽃, 水菊과 佛頭花

연애 한 번 못해 보는 꽃, 水菊과 佛頭花

꽃은 원래 사람들이 감상하라고 피는 것이 아니다. 식물의 생식기관으로 수정을 거쳐 자손을 퍼트리기 위한 것이다. 그런데 수정을 하지 못하는 꽃들이 있다. 주변에서 흔히 볼 수 있는 것으로 수국(水菊)과 불두화(佛頭花)가 대표적이다. 이 꽃들은 암술·수술이 없거나 퇴화해 수정을 하지 못한다. 벌이나 나비가 관심을 갖지도 않는다. 연애 한 번 못해 보는 꽃인 셈이다. 수국은 전 세계 화단을 장식하는 대표적인 꽃 중 하나다. 이름에서도 알 수 있듯이 물을 좋아하고 피는 시기도 6~7월 장마철이다. 요즘 꽃집 앞엔 빨리 개화시킨 수국을 전시해 놓은 것을 볼 수…

Read More Read More