해시 테이블(Hash Table)

해시 테이블(Hash Table) 해시 테이블은 키(key)와 값(value) 쌍을 저장하는 자료구조로, 해시 함수를 사용하여 키를 배열의 인덱스로 변환해 데이터를 빠르게 삽입, 검색, 삭제할 수 있도록 설계되어 있다. 이 자료구조는 데이터 접근 시간을 평균적으로 O(1)에 가깝게 만들어 효율적인 데이터 관리가 가능하도록 한다. ![Hash table](Introduction-to-Hashing.webp “https://www.geeksforgeeks.org/hashing-data-structure/?ref=outind) 해시 테이블의 기본 개념 해시 테이블은 ‘배열’과 ‘해시 함수’를 결합한 자료구조로 각 데이터 항목이 키와 값으로 구성되며, 이 키를 해시 함수에 입력하여 정수 형태의 해시 값을 산출한 후 배열 내의 특정 인덱스로 매핑하는 방식이다. 이렇게 매핑된 인덱스(버킷 또는 슬롯이라 부름)는 데이터가 저장되는 위치로 활용되며, 단순한 배열 구조를 기반으로 한다. ...

October 9, 2024 · 6 min · Me

부동 소수점 (Float)

부동 소수점 (Float) 부동 소수점은 실수를 (부호) × (가수) × (밑수)^(지수) 형태로 표현하는 방식이다. ‘부동’은 소수점이 움직인다는 의미로, 넓은 범위의 실수를 표현할 수 있다. 특징 IEEE 754 표준을 따름 부호, 지수, 가수 부분으로 구성 IEEE 754 표준에 따른 부동 소수점 종류 Half Precision 이 형식은 가장 작은 부동 소수점 표현 방식. 16비트를 사용한다. 1비트는 부호, 5비트는 지수부, 10비트는 가수부로 구성된다. 주로 그래픽스나 머신러닝에서 메모리를 절약하기 위해 사용된다. 약 3자리의 십진 정밀도를 제공하며, ±6.1 × 10⁻⁵에서 ±6.5 × 10⁴까지의 범위를 표현할 수 있다. 예시: Python: 1 2 3 import numpy as np x = np.float16(3.14) print(x) # 3.14 JavaScript: JavaScript는 기본적으로 Half Precision을 지원하지 않는다. 외부 라이브러리를 사용해야 한다. ...

October 7, 2024 · 3 min · Me

퀵 정렬 (Quick Sort)

퀵 정렬 (Quick Sort) 퀵 정렬은 1960년 Tony Hoare가 개발한 효율적인 분할 정복(Divide and Conquer) 알고리즘으로, 평균적으로 매우 빠른 성능을 보이는 정렬 방식이다. 실제 많은 프로그래밍 언어의 표준 라이브러리에 구현되어 있을 정도로 실용적인 정렬 알고리즘이다. 퀵 정렬은 간단한 아이디어를 바탕으로 하면서도 매우 효율적인 정렬 알고리즘이다. 평균적인 성능이 우수하고 실제 구현에서 다양한 최적화 기법을 적용할 수 있어 많은 환경에서 선호된다. 최악의 경우를 대비한 피벗 선택 최적화와 하이브리드 접근 방식을 통해 단점을 보완하여 현대적인 정렬 알고리즘의 기반이 되고 있다. ...

October 15, 2024 · 7 min · Me

백트래킹 (Backtracking)

백트래킹 (Backtracking) 백트래킹은 해결책을 찾는 과정에서 후보군을 구축하다가 해당 후보군이 해결책이 될 수 없다고 판단되면, 즉시 이전 단계로 돌아가서(백트랙) 다른 후보군을 탐색하는 문제 해결 전략이다. 알고리즘의 효율성을 높이는 중요한 기법으로, 완전 탐색보다 효율적으로 문제를 해결할 수 있게 해준다. 백트래킹은 조합 최적화 문제를 해결하는 강력한 알고리즘 패러다임이다. 모든 가능한 해결책을 체계적으로 탐색하면서도, 불가능한 경로를 조기에 차단하여 효율성을 높이는 특징이 있다. N-Queen, 스도쿠, 미로 찾기, 조합 문제 등 다양한 영역에서 활용되며, 복잡한 문제를 해결하는 데 필수적인 도구이다. ...

October 13, 2024 · 6 min · Me

Splay Tree

Splay Tree Splay Tree는 이진 검색 트리(Binary Search Tree)의 한 종류로, 데이터를 저장하고 효율적으로 검색, 삽입, 삭제할 수 있는 구조를 가지고 있다. 데이터베이스, 캐시 관리, 네트워크 라우팅 등 다양한 응용 분야에서 사용된다. Splay Tree는 자체 균형 이진 검색 트리의 일종으로, 최근에 접근한 노드를 루트로 이동시키는 “splay” 연산을 통해 자가 조정되는 특징을 가진다. 특징 자체 균형: splay 연산을 통해 트리의 균형을 유지한다. 최근 접근 노드 최적화: 자주 접근하는 노드를 루트 근처로 이동시켜 빠른 접근을 가능하게 한다. 동적 구조: 삽입, 삭제, 검색 연산 후 트리 구조가 변경된다. 장점 구현이 상대적으로 단순하다. 자주 접근하는 데이터에 대해 빠른 접근 속도를 제공한다. 추가적인 균형 정보 저장이 필요 없다. 단점 최악의 경우 트리의 높이가 O(n)이 될 수 있다. 연산마다 트리 구조가 변경되어 예측이 어려울 수 있다. 응용 캐시 관리: 최근 접근 데이터의 빠른 검색에 활용. 네트워크 라우팅: IP 라우팅 테이블 관리. 자동 완성 및 검색 엔진: 빠른 검색 결과 제공. Garbage Collector 알고리즘. 동작 원리 Splay Tree의 핵심 동작은 “splay” 연산이다. 이 연산은 다음과 같은 단계로 이루어진다: ...

October 11, 2024 · 4 min · Me

스택 (Stack)

스택 (Stack) 스택은 ‘쌓아올린 더미’라는 의미를 가진 자료구조로, 데이터를 차곡차곡 쌓아 올리는 형태를 취한다. 실생활에서 접시를 쌓아두거나 책을 쌓아두는 방식과 유사하다. 스택은 데이터의 삽입과 삭제가 한쪽 끝(스택의 상단 또는 top)에서만 이루어지는 제한적인 자료구조이다. 스택은 단순하지만 강력한 자료구조로, 다양한 알고리즘과 시스템에서 핵심적인 역할을 한다. LIFO 특성을 활용하여 함수 호출 관리, 수식 계산, 구문 분석 등 다양한 문제를 효율적으로 해결할 수 있다. 스택의 모든 기본 연산이 O(1) 시간 복잡도를 가지므로 성능이 중요한 애플리케이션에서도 유용하게 사용된다. ...

October 9, 2024 · 10 min · Me

힙 정렬 (Heap Sort)

힙 정렬 (Heap Sort) 힙 정렬은 비교 기반 정렬 알고리즘으로, 이진 힙 자료구조를 활용하여 효율적인 정렬을 수행한다. 시간 복잡도가 안정적이고 추가 메모리를 거의 사용하지 않는 특징을 가지고 있어 많은 시스템에서 널리 사용된다. 힙 정렬은 비교 기반 정렬 알고리즘 중에서 시간 복잡도가 보장되고 추가 메모리를 거의 사용하지 않는 효율적인 알고리즘이다. 최선, 평균, 최악의 경우 모두 O(n log n)의 시간 복잡도를 가지며, 특히 메모리 제약이 있는 환경에서 유용하다. 불안정 정렬이라는 단점이 있지만, 안정성이 중요하지 않은 많은 응용 분야에서 여전히 강력한 선택지이다. 힙 자료구조의 이해는 우선순위 큐, 그래프 알고리즘 등 컴퓨터 과학의 다른 영역에도 도움이 된다. ...

October 15, 2024 · 9 min · Me

분기 한정법 (Branch and Bound)

분기 한정법 (Branch and Bound) 분기한정법(Branch and Bound)은 최적화 문제를 해결하기 위한 효율적인 알고리즘 설계 패러다임이다. 이 방법은 거대한, 때로는 지수적으로 큰 해공간을 체계적으로 탐색하면서 최적해를 찾아내는 강력한 기법이다. 분기한정법은 다양한 최적화 문제를 해결하기 위한 강력하고 유연한 알고리즘 패러다임이다. 이 방법의 핵심은 문제를 체계적으로 나누고, 각 하위 문제의 한계값을 계산하여 유망하지 않은 경로를 가지치기함으로써 탐색 공간을 효과적으로 줄이는 데 있다. 분기한정법은 외판원 문제, 배낭 문제, 작업 할당 문제 등 다양한 NP-hard 최적화 문제에 성공적으로 적용되어 왔다. 물론 최악의 경우에는 여전히 지수 시간이 필요하지만, 효과적인 한계 함수와 가지치기 전략을 통해 실용적인 시간 내에 최적해 또는 근사 최적해를 찾을 수 있다. ...

October 13, 2024 · 13 min · Me

힙 (Heap)

힙 (Heap) 힙(Heap)은 완전 이진 트리(Complete Binary Tree) 기반의 특수한 트리 자료구조로, 특정한 순서 속성을 만족한다. 특히 우선순위 큐를 구현하는 데 효율적으로 사용되며, 다양한 알고리즘에서 핵심적인 역할을 한다. 힙은 최댓값이나 최솟값에 빠르게 접근해야 하는 상황에서 매우 유용한 자료구조이다. 힙은 효율적인 우선순위 접근과 관리를 제공하는 강력한 자료구조이다. 최댓값이나 최솟값에 빠르게 접근해야 하지만 다른 요소들의 전체 정렬은 필요하지 않을 때 특히 유용하다. 효율적인 삽입, 삭제, 최댓값/최솟값 접근 연산을 통해 다양한 알고리즘과 시스템에서 중요한 역할을 수행한다. ...

October 7, 2024 · 8 min · Me

큐 (Queue)

큐 (Queue) 큐는 컴퓨터 과학에서 가장 기본적이고 중요한 자료구조 중 하나이다. 일상생활에서 은행 창구나 매표소의 대기열과 같은 개념으로, 컴퓨터 과학에서도 데이터를 순서대로 처리하는 다양한 상황에 활용된다. 큐는 데이터를 일정한 순서에 따라 저장하고 접근하는 선형 자료구조이다. 큐의 가장 큰 특징은 데이터가 들어온 순서대로 처리된다는 점이다. 큐는 단순하면서도 강력한 자료구조로, 다양한 알고리즘과 시스템에서 핵심적인 역할을 한다. FIFO 특성을 활용하여 작업 스케줄링, 버퍼링, 그래프 탐색 등 다양한 문제를 효율적으로 해결할 수 있다. 큐는 배열, 연결 리스트, 또는 이중 스택 등 다양한 방식으로 구현할 수 있으며, 각 구현 방식은 고유한 장단점을 가진다. 응용 분야와 요구사항에 따라 적절한 큐 구현을 선택하는 것이 중요하다. ...

October 7, 2024 · 21 min · Me