이 글에서는 이진 탐색 트리(Binary Search Tree)에서 사용되는 후위 순회(Post-order Traversal) 기법을 재귀(Recursive) 방식으로 구현하는 방법을 자세히 살펴보겠습니다.후위 순회는 왼쪽 서브트리 → 오른쪽 서브트리 → 루트 순서로 노드를 방문하는 트리 순회 방식입니다. 트리를 삭제하거나, 자식 노드를 먼저 처리한 후 부모 노드를 처리해야 하는 상황에서 특히 유용합니다.예시 트리다음과 같은 이진 탐색 트리가 있다고 가정해 보겠습니다.이 트리를 후위 순회로 방문하면 다음과 같은 순서로 노드가 출력됩
이번 글에서는 이진 탐색 트리(Binary Search Tree)에서 널리 사용되는 전위 순회(Pre-order Traversal) 기법을 재귀(Recursive) 방식으로 구현하는 방법을 살펴보겠습니다.전위 순회란 무엇인가?전위 순회는 트리의 노드를 루트(Root) → 왼쪽 서브트리 → 오른쪽 서브트리 순서로 방문하는 순회 방식입니다. 루트 노드를 가장 먼저 처리하기 때문에 전위(前位)라는 이름이 붙었으며, 트리 구조를 복제하거나 수식 트리를 접두 표기법(Prefix Notation)으로 변환할 때 특히 유용하게 활용됩니다.다음과
이진 탐색 트리(Binary Search Tree, BST)는 데이터를 효율적으로 저장하고 검색하기 위해 특정 규칙을 갖는 이진 트리입니다. 일반적인 이진 트리와 달리, 노드의 배치에 엄격한 순서 규칙이 적용되기 때문에 탐색·삽입·삭제 작업을 빠르게 수행할 수 있습니다.이진 탐색 트리의 성질이진 탐색 트리는 다음과 같은 조건을 만족해야 합니다.모든 이진 탐색 트리는 이진 트리이다.왼쪽 자식 노드는 항상 부모(루트) 노드보다 작은 값을 가진다.오른쪽 자식 노드는 항상 부모(루트) 노드보다 큰 값을 가진다.이상적인 이진 탐색 트리에서는
이 글에서는 그래프(graph) 자료구조가 무엇인지 살펴보고, 그래프를 탐색하는 대표적인 순회(traversal) 알고리즘 두 가지를 소개합니다. 그래프는 비선형(non-linear) 자료구조의 하나로, 여러 개의 노드(node, 정점)와 이들을 연결하는 간선(edge)으로 구성됩니다. 간선에는 방향이 있는 경우(유향 그래프)와 방향이 없는 경우(무향 그래프)가 있습니다. 그래프는 일반적으로 G(V, E) 형태로 표현하며, V는 정점의 집합, E는 간선의 집합을 의미합니다. 예를 들어 아래 그림의 그래프는 G({A, B, C, D
DFS와 BFS, 어디에 활용될까?그래프 이론에서 가장 기본적이면서도 강력한 두 가지 탐색 알고리즘인 DFS(Depth First Search, 깊이 우선 탐색)과 BFS(Breadth First Search, 너비 우선 탐색)는 단순한 그래프 순회를 넘어 컴퓨터 과학 전반에서 폭넓게 활용되고 있습니다. 이번 글에서는 두 알고리즘이 실제로 어떤 문제를 해결하는 데 쓰이는지 대표적인 응용 사례를 살펴보겠습니다.DFS(깊이 우선 탐색)의 주요 응용DFS는 한 경로를 끝까지 깊이 탐색한 뒤 되돌아오는 방식으로 동작하며, 다음과 같은 용도
스패닝 트리(Spanning Tree)는 무방향 그래프의 부분 집합으로, 그래프의 모든 정점을 최소한의 간선으로 연결한 트리를 의미합니다.그래프의 모든 정점이 서로 연결되어 있다면 반드시 하나 이상의 스패닝 트리가 존재합니다. 또한 하나의 그래프에는 두 개 이상의 스패닝 트리가 동시에 존재할 수도 있습니다.최소 스패닝 트리란?최소 스패닝 트리(Minimum Spanning Tree, MST)는 연결된 가중치 무방향 그래프에서 모든 정점을 연결하면서 간선 가중치의 총합이 최소가 되는 간선들의 부분 집합입니다. MST를 구하는 대표적인
베르누이 분포란?베르누이 분포(Bernoulli Distribution)는 단 한 번의 시행에서 x = 0과 x = 1, 두 가지 결과만 가능한 이산 확률 분포입니다. 여기서 x = 1은 성공(success)을, x = 0은 실패(failure)를 의미합니다. 성공이 일어날 확률은 p이고, 실패가 일어날 확률은 q = 1 − p로 정의됩니다.베르누이 분포의 확률질량함수(PMF)는 다음과 같습니다.$$P(x)=\begin{cases}1-p & \text{for } x = 0\\p & \text{for } x = 1\end{cases}
이항 분포란 무엇인가?이항 분포(Binomial Distribution)는 N번의 베르누이 시행(Bernoulli Trial) 중 n번의 성공을 얻을 확률을 나타내는 이산 확률 분포 Pp(n | N)입니다.여기서 베르누이 시행은 x = 0과 x = 1이라는 두 가지 가능한 결과만을 갖는 실험을 의미합니다.x = 1 : 성공(success)x = 0 : 실패(failure)성공이 일어날 확률을 p라고 하면, 실패가 일어날 확률 q는 q = 1 – p로 정의됩니다. 이러한 조건에서 이항 분포는 다음과 같은 수식으로 표현할 수 있습니다.
기하 분포(Geometric Distribution)는 첫 번째 성공이 발생할 때까지 필요한 시행 횟수를 모델링하는 대표적인 이산 확률 분포입니다. n = 0, 1, 2, … 과 같이 비음수 정수 값에 대해 정의되며, 각 시행은 서로 독립적이고 성공 확률 p가 매번 동일하다는 가정을 전제로 합니다.확률 질량 함수(PMF)기하 분포의 확률 질량 함수는 다음과 같습니다.$$P\lgroup n\rgroup=p\lgroup1-p\rgroup^{n}$$여기서 p는 단일 시행에서의 성공 확률을 의미하며, (1−p)^n은 처음 n번의 시행이 모
음의 이항 분포란 무엇인가?음의 이항 분포(Negative Binomial Distribution)는 음의 이항 이산 분포를 따르는 정수형 난수를 생성하는 확률 분포입니다. 이 분포는 파스칼 분포(Pascals Distribution)라고도 알려져 있으며, k번의 성공이 발생하기 전까지의 실패 횟수를 모델링하는 데 사용됩니다.음의 이항 분포는 다음과 같은 수식으로 표현할 수 있습니다.$$P\lgroup i\arrowvert k,p\rgroup=\lgroup \frac{k+i-1}{i}\rgroup p^{k}\lgroup 1-p\rg
최적 이진 탐색 트리(Optimal Binary Search Tree)란?정렬된 순서로 주어진 정수 집합(keys)과 각 키의 검색 빈도를 저장한 배열(freq)이 있을 때, 이 데이터로 이진 탐색 트리(Binary Search Tree, BST)를 구성하여 모든 검색에 드는 총비용을 최소화하는 것이 이 문제의 목표입니다.검색 비용은 노드의 깊이(루트는 1)에 해당 키의 빈도를 곱한 값으로 계산됩니다. 따라서 자주 검색되는 키일수록 루트에 가깝게 배치하는 것이 유리합니다.이 문제는 부분 문제의 해를 저장하고 활용하는 동적 계획법(D
이 글에서는 볼록 껍질(Convex Hull)의 대표적인 예제를 다룹니다. 주어진 점들의 집합이 있을 때, 가능한 한 적은 수의 점만 사용하여 모든 점을 포함하는 다각형을 만들어야 하는 상황입니다. 이를 해결하기 위해 널리 알려진 자비스 마치(Jarvis March) 알고리즘, 즉 선물 포장(Gift Wrapping) 기법을 살펴보겠습니다.자비스 마치 알고리즘이란?자비스 마치 알고리즘은 주어진 데이터 점들의 집합으로부터 볼록 껍질의 꼭짓점(경계 점)들을 찾아내는 알고리즘입니다.기본 동작 원리는 다음과 같습니다.데이터 집합에서 가장
추상 자료형(Abstract Data Type, ADT)은 값의 집합과 연산의 집합을 통해 동작이 정의되는 특수한 형태의 자료형입니다. 추상이라는 단어가 붙는 이유는, 개발자가 이 자료형을 활용해 다양한 연산을 수행할 수 있지만 그 연산이 내부에서 어떻게 구현되고 작동하는지는 사용자에게 완전히 숨겨져 있기 때문입니다. 즉, ADT는 기본(primitive) 자료형들로 구성되지만, 실제 연산 로직은 외부로부터 감춰집니다. 스택(Stack)은 대표적인 ADT 중 하나로, LIFO(Last-In, First-Out, 후입선출) 방식으로
데이터를 다루다 보면 특정 키(key)를 찾아야 하는 상황이 자주 발생합니다. 이때 어떤 탐색 기법을 선택하느냐에 따라 프로그램의 성능이 크게 달라질 수 있습니다. 이 글에서는 가장 대표적인 두 가지 탐색 기법인 순차 탐색(Sequential Search)과 이진 탐색(Binary Search)의 핵심적인 차이점을 비교해 살펴보겠습니다. 순차 탐색 vs 이진 탐색 비교표 순차 탐색 (Sequential Search) 이진 탐색 (Binary Search) 시간 복잡도는 O(n)시간 복잡도는 O(log n) 첫 번째 위
정렬(Sorting)은 데이터 구조 분야에서 가장 핵심적인 주제 중 하나로, 그 종류만 해도 200가지가 넘습니다. 이 글에서는 수많은 정렬 기법 중 대표적인 알고리즘들을 선별해 비교 분석해 보겠습니다. 정렬 알고리즘은 크게 비교 기반(comparison-based) 정렬과 비비교 기반(non-comparison-based) 정렬 두 가지로 나눌 수 있습니다.비교 기반 정렬 알고리즘버블 정렬(Bubble Sort), 선택 정렬(Selection Sort), 삽입 정렬(Insertion Sort), 병합 정렬(Merge Sort),
그래프(Graph)는 대표적인 비선형 자료구조입니다. 그래프는 노드(Node)를 사용하여 데이터를 표현하고, 에지(Edge)를 통해 노드 사이의 관계를 나타냅니다.그래프 G는 크게 두 가지 요소로 구성됩니다. 바로 정점(Vertex)과 간선(Edge)입니다. 정점은 집합 V로 표현되고, 간선은 집합 E로 표현됩니다. 따라서 그래프는 일반적으로 G(V, E)와 같이 표기합니다. 아래 예시를 통해 그래프의 개념을 좀 더 구체적으로 살펴보겠습니다.방향 그래프의 이해위 그래프에는 다섯 개의 정점과 다섯 개의 간선이 존재하며, 모든 간선은
데이터를 효율적으로 저장하고 탐색하기 위해 다양한 검색 트리(Search Tree)가 사용됩니다. 각 트리는 자체 균형 방식과 구조적 특징이 달라서, 상황에 따라 성능 차이가 크게 벌어집니다. 이 글에서는 대표적인 검색 트리들의 특징을 살펴보고, 삽입·삭제·탐색 연산의 시간 복잡도를 평균 경우와 최악의 경우로 나누어 비교해 보겠습니다.대표적인 검색 트리의 종류가장 기본이 되는 검색 트리는 이진 탐색 트리(Binary Search Tree, BST)입니다. BST는 왼쪽 자식에는 작은 값, 오른쪽 자식에는 큰 값을 배치하는 단순한 규
공유 메모리와 분산 공유 메모리(DSM)란?공유 메모리(Shared Memory)는 둘 이상의 프로그램이 동시에 접근할 수 있는 메모리 블록을 의미합니다. 공유 메모리 개념은 프로그램 간 통신 수단을 제공하고, 불필요하게 중복되는 메모리 관리를 줄여 효율성을 높이는 데 활용됩니다.분산 공유 메모리(Distributed Shared Memory, DSM)는 이러한 공유 메모리 개념을 분산 시스템 환경에서 구현한 기술입니다. DSM 시스템은 로컬 물리적 공유 메모리가 없는 느슨하게 결합된(loosely coupled) 시스템에서도 공유
BFS와 DFS는 그래프(Graph)의 모든 정점을 방문하는 대표적인 그래프 탐색 알고리즘입니다. 두 알고리즘은 탐색 방향과 사용하는 자료구조에서 핵심적인 차이를 보이며, 이러한 차이 때문에 각각 다른 상황에서 더 효율적으로 동작합니다.BFS(Breadth First Search, 너비 우선 탐색)BFS는 그래프를 너비 방향으로 순회하는 알고리즘입니다. 시작 정점에서 가까운 정점부터 인접한 노드들을 차례대로 방문하며, 큐(Queue)를 사용해 다음에 탐색할 정점을 기억합니다. 탐색 중 막다른 길(dead end)에 도달하면 큐에 저
이동통신 시스템에서 채널을 셀(cell)에 배정하는 방식은 크게 고정 채널 할당(Fixed Channel Allocation, FCA)과 동적 채널 할당(Dynamic Channel Allocation, DCA)으로 나뉩니다. 두 방식은 채널 운용 전략, 호출 차단 처리, 주파수 이용률, 비용 등 여러 면에서 뚜렷한 차이를 보이며, 이는 네트워크 설계와 성능에 직접적인 영향을 미칩니다.고정 채널 할당(FCA)이란?고정 채널 할당(FCA)은 각 셀에 채널 또는 음성 채널을 미리 고정적으로 배정하는 방식입니다. 한 번 할당된 채널은 변