2023. 10. 11. 00:03ㆍRun/Algorithm
자료구조와 알고리즘
- 프로그램이란 데이터를 표현하고 (자료구조) 그렇게 표현된 데이터를 처리하는 것 (알고리즘)
- Input → [Process] → Output
자료구조의 분류
- 선형 구조: 1 : n / 비선형 구조: n : m
- 배열, 연결리스트: 물리적으로 어떻게 저장되어 있는지로 구분
- 스택, 큐: 접근 방식에 따라 구분
ADT (Abstract Data Type)
- 데이터 타입을 추상적으로 정의한 것
- 데이터나 연산이 무엇(what)인가를 정의함 (Set of operations)
- 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 정의하지 않음
- ADT가 설명해야 하는 것:
- 자료구조를 어떻게 생성하고 제거하는지
- 어떻게 item을 추가하고 삭제하는지
- 어떻게 item을 검색/접근하는지
- (collection이 비어있는지, 꽉 찼는지)
- (collection의 sub set)
Array & Linked List
[ 배열 (Array) ]
- 같은 데이터형을 가진 원소가 순서 있게 구성된 집합
- 각 원소 구분하기 위해 index 사용
- 기억장치 내에서 순차적으로 저장된 리스트
- 하나의 배열은 연속적인 기억장소에 한 개의 블록으로 저장
[ 연결 리스트 (Linked List) ]
- 리스트의 항목들을 node라고 하는 곳에 분산하여 저장
- Node = 데이터 필드 + 링크 필드
- 데이터 필드: 리스트의 원소, 데이터 값 저장하는 곳
- 링크 필드: 다른 node의 주소 값을 저장하는 곳 (포인터)
- 종류: 단순 연결 리스트, 원형 연결 리스트, 이중 연결 리스트
- 장점: 삽입/삭제가 용이, 연속된 메모리 공간 필요 없음, 크기 제한 없음
- 단점: 구현 어려움, 오류 발생 확률 높음
Stack & Queue
[ 스택 (Stack) ]
- 후입선출 (LIFO: Last In First Out)
- push(): 스택에 데이터 추가 (overflow 발생 가능)
- pop(): 스택에서 데이터 삭제 (underflow 발생 가능)
[ 큐 (Queue) ]
- 선입선출 (FIFO: First In First Out)
- enqueue(), dequeue()
- 종류: 선형 큐, 원형 큐, deq
Tree & Graph
[ Tree ]
- 계층적 구조를 나타내는 자료구조 (부모-자식 관계 노드)
- 종류: 이진 트리, 일반 트리
- 트리 순회 (traversal): 트리의 모든 노드를 중복 없이 한번씩만 방문해서 순회하는 과정
- 전위 순회 (Pre-order Traversal): Root > Left > Right
- 중위 순회 (In-order Traversal): Left > Root > Right
- 후위 순회 (Post-order Traversal): Left > Right > Root
- Heap:
- 이진 탐색 트리 (Binary Search Tree):
- 왼쪽 sub tree는 반드시 부모 노드 값보다 작아야 함
- 오른쪽 sub tree는 반드시 부모 노드 값보다 크거나 같아야 함
- AVL Tree:
- Balancing factor가 2 미만
- 왼쪽이 크면 양수, 오른쪽이 크면 음수
- 균형을 위한 rotation
- 2-3 Tree:
- 하나의 node 안에 최대 2개의 요소가 가능하며, 자식 노드는 3개까지 가능
- Height-balanced (모든 leaves는 같은 level)
[ Graph ]
- 연결되어 있는 객체 간 관계가 N:M인 자료구조
- 그래프 G = (V, E)
- 정점(vertices) → V(G): 그래프 G의 정점들의 집합
- 간선(edge) → E(G): 그래프 G의 간선들의 집합
Hashing
- Key 값 비교를 통해 탐색하고자 하는 항목에 접근
- Key 값에 대한 산술적 연산에 의해 테이블의 주소를 계산하여 항목에 접근
- 충돌:
- 서로 다른 탐색 key를 갖는 항목들이 같은 해시 주소를 가지는 현상
- 충돌 발생하면 해시 테이블에 항목 저장 불가능
- 해결책 1) 선형 조사법: 충돌이 일어난 항목을 해시 테이블의 다른 위치에 저장
- 해결책 2) 체이닝: 각 버켓에 삽입/삭제가 용이한 연결 리스트 할당
'Run > Algorithm' 카테고리의 다른 글
[Algorithm] 4. Divide and Conquer (1) | 2023.10.11 |
---|---|
[Algorithm] 3. Brute Force Algorithm (0) | 2023.10.11 |
[Algorithm] 2. 탐색과 정렬 알고리즘 (0) | 2023.10.11 |
[Algorithm] 0. Introduction (0) | 2023.10.11 |
[Algorithm] 빅오(Big-O) 표기법 (0) | 2023.10.11 |