[c++]게임의 이진 탐색 트리

Date:

카테고리:

이진 탐색 트리에 대한 나의 고찰

우선 이진 탐색 트리를 사용하는 이유는 당연히

탐색시간이 O(log n) 수준으로 빠르기 때문이다



데이터를 삽입하며 동시에 정렬이 되기 때문에

매우 빠른 연산량을 지니지만, 사실 이런 구조는

눈으로 직접 보기가 어렵기 때문에 가시성이 좋지가 않아서

내가 만들어놓았다가도 구조를 다시 파악하고,

이해하는데 시간이 소요된다.



알고리즘 자체가 어렵다기 보다는 STL 에서도

이진 탐색 노드를 굳이 따로 구현하지 않는 이유는

set, map, multiset, multimap 등의 컨테이너가

이미 이진 탐색 트리를 기반으로 되어있기 때문이다



STL을 선호하는 이유중 하나는 통일된 시스템이기

때문인데, 유지보수가 간편하고 그만큼 이해하기도

편하다. 굳이 쓰레드를 관리해가면서 커스텀 컨테이너를

만드는 짓을 하는것이 의미없다고 생각된다.

게임 개발에 있어서는 그러한 컨테이너들 보다도

다른 방면의 최적화 한번이 더 치명적으로 다가올 수도

있기 때문이다.



c++기반의 게임개발을 하고있는 나의 입장에서는

이진 탐색 트리 보다는 일반적인 트리 구조를

액터와 오브젝트 등으로 나누어서 관리하는 측면에서

더 많이 사용한다고 생각한다.


그래서 과연 내가 어디에 써먹을 수 있을까?

만약 이진 탐색 트리를 사용한다고 한다면,

(물론 레드 블럭 트리도 포함이다) AI 방면에서

가장 많이 사용할 수 있을 것으로 본다.

이미 언리얼에서는 AI Behavior Tree 로 구현되어 있다.



사실상 랭킹 시스템이나 아이템 검색 등은 프로그래밍

기술이라고 보기에는 너무 보편화된 기능이라고 생각한다

그리고 더더욱 신입 개발자로 취직을 하게 될 나의 입장에서는

그러한 시스템을 만들기 보다는 이미 있는 시스템을 이해하는

쪽에 시간을 더 많이 할애할 것이라고 생각한다.



클라이언트 개발자로 방향을 정한 시점에서, 스킬의

레벨을 통해서( 노드의 깊이) 랜덤한 패턴을 구현하거나

세부 옵션을 보다 정교하게 컨트롤 할 수 있다고 본다.

D3D 개발을 전재로 한다면 IMGUI를 통해서 조금 더

가시적이고 구체적인 관리도 할 수 있을것으로 본다.

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기