반응형
1. 선형 리스트 (Linear List)
- 설명: 데이터를 연속된 메모리 공간에 저장하며, 순서를 보장하는 자료구조.
- 특징:
- 인덱스를 통해 O(1) 시간 복잡도로 접근.
- 삽입/삭제는 O(n)로 비효율적.
- 필수 알고리즘:
- 이분 탐색 (Binary Search):
- 정렬된 리스트에서 O(log n) 시간 복잡도로 값을 탐색.
- 슬라이딩 윈도우 (Sliding Window):
- 고정 크기의 연속 부분 리스트 처리.
- 이분 탐색 (Binary Search):
자료 출처: https://velog.velcdn.com/images/hyhy9501/post/1c9f28a0-8e27-4aa2-9f6e-e89bb79ed2b4/image.png
2. 연결 리스트 (Linked List)
- 설명: 노드(Node)와 포인터로 구성된 비연속적 메모리 저장 구조.
- 특징:
- 삽입/삭제가 O(1)로 빠름.
- 탐색은 O(n)으로 느림.
- 필수 알고리즘:
- 역순 연결 리스트 (Reverse Linked List):
- 연결 리스트를 뒤집음.
- 사이클 검출 (Cycle Detection):
- 플로이드의 토끼와 거북이 알고리즘 사용.
- 역순 연결 리스트 (Reverse Linked List):
2.1 원형 연결리스트 (Circular Linked List)
- 정의:
마지막 노드가 첫 번째 노드를 가리키도록 연결된 리스트. - 특징:
- 순환 구조: 노드 끝에서 다시 시작으로 돌아옴.
- 종료 조건: 명확한 조건 없이 탐색하면 무한 순환 가능.
- 삽입/삭제: 리스트 어디서나 삽입과 삭제가 용이.
- 단점:
- 순환 구조 때문에 리스트의 끝을 감지하기 어려움.
- 활용 사례:
- 자원 관리, 라운드 로빈 스케줄링.
2.2 이중 연결 리스트 (Doubly Linked List)
- 정의:
- 기존 단순, 원형 연결 리스트의 단점인 단방향 흐름을 2개의 링크 필드를 이용하여 양방향으로 움직일 수 있게 만든 것이 이중 연결 리스트
- 각 노드가 데이터, 다음 노드의 포인터(next), 그리고 **이전 노드의 포인터(prev)**를 가지는 리스트.
- 특징:
- 양방향 탐색 가능: 앞뒤로 자유롭게 이동할 수 있음.
- 삽입/삭제 용이: 특정 노드 위치에서 삽입/삭제가 간단.
- 단점: 추가 포인터(prev)가 필요하므로 메모리 사용량 증가.
- 활용 사례:
- 양방향 데이터 흐름을 다루는 시스템.
3. 스택 (Stack)
- 설명: LIFO(Last In First Out) 구조의 자료구조.
- LIFO (선입후출)
- 특징:
- 삽입/삭제 연산이 O(1).
- 필수 알고리즘:
- 괄호 유효성 검사:
- 올바른 괄호 쌍을 확인.
- DFS (Depth First Search):
- 스택 기반의 깊이 우선 탐색.
- 괄호 유효성 검사:
4. 큐 (Queue)
- 설명: FIFO(First In First Out) 구조의 자료구조.
- 특징:
- 삽입은 뒤쪽, 삭제는 앞쪽에서 이루어짐.
- 필수 알고리즘:
- BFS (Breadth First Search):
- 너비 우선 탐색.
- 라운드 로빈 스케줄링:
- 프로세스 스케줄링.
- BFS (Breadth First Search):
4.1 원형 큐(Circular Queue)
- 정의:
큐의 끝이 다시 시작 부분과 연결된 순환 구조의 큐. - 특징:
- 일반 큐와 달리 공간 낭비를 줄임.
- 빈 공간이 있으면 공간을 재활용 가능.
- 단점:
- 순환 구조이므로 포인터 관리가 필요.
- 활용 사례:
- 네트워크 버퍼 관리, 데이터 스트리밍.
5. 데크 (Deque)
- 설명: 양쪽 끝에서 삽입/삭제가 가능한 자료구조.
- 특징:
- 스택과 큐의 특성을 모두 가짐.
- 필수 알고리즘:
- 슬라이딩 윈도우 최대값:
- O(n)으로 최대값 계산.
- LRU 캐시 구현:
- 최근 사용되지 않은 데이터를 삭제.
- 슬라이딩 윈도우 최대값:
6. 이진 트리 (Binary Tree)
- 설명: 각 노드가 최대 두 개의 자식을 가지는 계층적 자료구조.
- 특징:
- 전위, 중위, 후위 순회 가능.
- 필수 알고리즘:
- 트리 순회:
- 전위, 중위, 후위 탐색.
- 최대 깊이 계산:
- 트리의 깊이 계산.
- 트리 순회:
6.1 이진 트리 종류
6.1.1 정 이진 트리(Full Binary Tree)
- 정의:
모든 노드가 0개 또는 2개의 자식 노드를 가지는 이진 트리. - 특징:
- 리프 노드를 제외한 모든 노드는 반드시 2개의 자식을 가짐.
- 트리의 깊이가 hh일 때, 최대 노드 수는 2h+1−12^{h+1} - 1.
6.1.2 포화 이진 트리(Perfect binary tree)
- 정의:
모든 리프 노드가 같은 깊이에 있고, 모든 노드가 2개의 자식 노드를 가진 이진 트리. - 특징:
- 트리의 깊이가 hh일 때, 노드의 개수는 2h+1−12^{h+1} - 1.
- 모든 레벨이 가득 채워짐.
6.1.3 완전 이진 트리(complete binary tree)
- 정의:
모든 레벨이 가득 차 있으며, 마지막 레벨은 왼쪽에서 오른쪽으로 차례대로 노드가 채워진 이진 트리. - 특징:
- 마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있으며, 마지막 레벨의 모든 노드는 가능한 한 가장 왼쪽에 있다.
- 힙(Heap) 구현에 자주 사용됨.
6.1.4 편향 이진 트리(skewed binary tree)
- 편향 이진 트리 정의
- 왼쪽 편향 이진 트리 (Left-Skewed Binary Tree):
모든 노드가 왼쪽 자식만 가지는 트리. - 오른쪽 편향 이진 트리 (Right-Skewed Binary Tree):
모든 노드가 오른쪽 자식만 가지는 트리.
- 왼쪽 편향 이진 트리 (Left-Skewed Binary Tree):
- 특징
- 노드 구조:
- 각 노드는 한쪽 방향(왼쪽 또는 오른쪽)으로만 자식을 가지며, 다른 한쪽은 비어 있습니다.
- 효율성 문제:
- 높이가 nn 인 경우, 트리의 성능이 **연결 리스트(Linked List)**와 비슷해짐.
- 검색, 삽입, 삭제의 시간 복잡도가 최악의 경우 O(n)O(n) 로 비효율적.
- 노드 구조:
- 특수한 경우:
- 데이터가 이미 정렬된 순서로 삽입될 때 발생.
- 예: 이진 탐색 트리(BST)에서 정렬된 데이터를 삽입하면 편향 트리가 생성됨.
7. 트리 (Tree)
- 설명: 계층적으로 데이터를 저장하는 자료구조.
- 특징:
- 루트 노드에서 시작하여 자식 노드로 확장.
- 필수 알고리즘:
- LCA (Lowest Common Ancestor):
- 최소 공통 조상 찾기.
- 트리 기반 DP:
- 구간 연산 최적화.
- LCA (Lowest Common Ancestor):
자료 출처: https://velog.velcdn.com/images/eunsung-dev/post/75d09e4c-50f9-456d-8afd-70de9235b5bd/image.jpeg
7.1 . 트리 & 이진트리 주요 차이점
특징트리(Tree)이진 트리(Binary Tree)
노드의 자식 수 | 제한 없음 | 최대 2개의 자식 노드 (왼쪽, 오른쪽) |
구조의 제약 | 자유로운 계층 구조 | 고정된 구조 (이진) |
활용 사례 | 조직도, 파일 시스템, XML 구조 등 | 이진 탐색 트리, 힙, 표현식 계산 등 |
복잡도 | 다양한 변형 구조로 유연함 | 엄격히 구조화되어 알고리즘 설계가 간단 |
8. 그래프 (Graph)
- 설명: 정점(Vertex)과 간선(Edge)으로 구성된 네트워크 구조.
- 특징:
- 방향, 무방향, 가중치 그래프 존재.
- 필수 알고리즘:
- DFS, BFS:
- 그래프 탐색.
- 다익스트라 알고리즘:
- 최단 경로 계산.
- DFS, BFS:
9. 해시 테이블 (Hash Table)
- 설명: 키-값 쌍을 저장하며, 해시 함수로 빠르게 검색.
- 특징:
- 평균 O(1)의 검색, 삽입.
- 필수 알고리즘:
- 충돌 해결:
- 체이닝, 오픈 어드레싱.
- Anagram 검출:
- 문자열 빈도 계산.
- 충돌 해결:
10. 힙 (Heap)
- 설명: 우선순위 큐를 구현하는 완전 이진 트리.
- 특징:
- 최소 힙: 루트는 최솟값.
- 최대 힙: 루트는 최댓값.
- 필수 알고리즘:
- 힙 정렬:
- O(n log n) 정렬.
- 다익스트라 알고리즘:
- 최소 힙을 이용한 최단 경로.
- 힙 정렬:
11. 트라이 (Trie)
- 설명: 문자열 검색에 특화된 트리 구조.
- 특징:
- 각 노드가 문자열의 한 문자를 저장.
- 필수 알고리즘:
- 문자열 검색:
- 접두사 기반 탐색.
- 자동 완성:
- 입력한 문자열로 가능한 단어 추천.
- 문자열 검색:
12. 세그먼트 트리 (Segment Tree)
- 설명: 배열의 구간 연산(합, 최솟값 등)을 빠르게 처리.
- 특징:
- 쿼리와 업데이트가 O(log n).
- 필수 알고리즘:
- 구간 합 쿼리:
- 특정 구간의 합 계산.
- 최소/최댓값 쿼리:
- 구간 내 최소값 또는 최대값 찾기.
- 구간 합 쿼리:
13. 유니온-파인드 (Union-Find)
- 설명: 상호 배타적 집합 관리 자료구조.
- 특징:
- 경로 압축으로 집합을 효율적으로 관리.
- 필수 알고리즘:
- Union 연산:
- 두 집합 병합.
- Find 연산:
- 특정 요소의 집합 찾기.
- Union 연산:
반응형
'Computer Science > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조 & 알고리즘] 그래프 + DFS (3) | 2024.12.20 |
---|---|
[자료구조 & 알고리즘] 정렬 알고리즘 총 정리 (0) | 2024.12.18 |
[자료구조 & 알고리즘] 탐색 알고리즘 총 정리 (feat. 이진탐색, DFS, BFS) (2) | 2024.12.17 |
[알고리즘] 공부 목표 & 학습자료 (0) | 2024.12.01 |
[알고리즘 C] 정렬 알고리즘 기본 코드 (1) | 2024.12.01 |