- 메모리 상 연속적인 위치
- 순차적인 액세스가 매우 빠름
캐시 메모리 작동 측면
- 직관적
- 인덱스를 통한 빠른 접근
- 특정 위치 데이터 삽입 과정이 복잡함
- 빈번한 할당·해제로 인한 메모리 단편화 우려
- 메모리 상 불 연속적인 위치
- 포인터를 통한 요소 접근
default
- 헤드 노드부터 순차적 접근을 통한 요소 접근
- 특정 위치 데이터 삽입 과장이 간단함
주기억 장치의 빈 공간이 여러 개의 조각으로 나뉘는 현상
- 사용가능한 공간 축소 ↓
- 읽기/쓰기 속도 ↓
- 내부 단편화
의도하지 않는 메모리 할당으로 낭비되는 현상
필요한 메모리의 크기보다 큰 단위로 할당되는 경우
- 외부 단편화
프로그램이 다양한 크기의 남은 영역을 할당·해제로 인해 빈 공간이
여러 작은 조각으로 나뉘는 현상
- 사용 가능한 메모리 공간 총합 여유
- 메모리 할당 알고리즘 약화
프로그램 성능 저하
- push
- 복사 생성자 호출
default
- 이동 생성자 호출
r-value
- 오버 헤드 발생
이동·복사
- emplace
- 내부에서 객체 생성
- 버그 발생 우려
예기치 못한 타입 변환
2 ^ (n+1) - 1
말단 노드 제외한 모든 노드 차수가 2
힙 속성을 만족하며 최댓값·최솟값을 O(1) 시간복잡도로 탐색위한 완전 이진 트리 자료 구조
- 노드 삽입·제거 → 부모
- 자식 노드 사이의 키값의 재귀적인 비교
- O(log n)
힙 속성 | 부모 노드 키 값이 자식 노드 키 값보다 항상 크거나 작은 성질
- 불균형 상태의 극단적인 경우 발생
단순 연결 리스트와 동일
- 자가 균형 이진 탐색 트리를 통한 해결
AVL , Red-Black 트리
불균형 상태 | 루트 노드 기준으로 부분 트리의 높이가 한 방향으로 크게 치우져져 있는 상태
자가 균형 이진트리| 노드 삽입·제거시 규칙에 따라 부분 트리의 회전을 통해 균형을 유지하는 자료구조
- union by rank
항상 크기가 작은 집합을 큰 집합 하위 연결하는 형태로 유니온 연산을 구현- 경로 압축
루트 노트들 찾을 때 까지 방문 노드를 루트 노드로 갱신
- 시간 복잡도
- 연산 소요 시간
- 주로 사용
현대 컴퓨터의 메모리 여유성
- 점근 표기법 사용
상한 (빅 오), 하한 (빅 오메가), 상한·하한의 종합적 (빅 세타)
- 최장 시간 파악 중요
default
- 공간 복잡도
- 연산 사용 메모리
- 시간 복잡도
요소 추가·제거 < 실제 크기 증가
매 번 요소 추가시 컨테이너 크기 증가는 재할당으로 인한 오버헤드 초래- 해결 방법
현재 capacity 에 비례하는 크기로 적절하게 늘리는 방식 사용
컨테이너가 저장할 수 있는 요소 최대 개수인 capacity 와 실제 컨테이너
저장 요소 개수인 size 의 차이
- 분할-정복
- 주어진 문제를 독립적인 작은 문제 분할
- 부분 문제 해결
- 결합하여 문제의 해 도출
- 동적계획법
주어진 문제를 분할 시 이전 단계의 결과가 이후 단계에서 활용되어 문제를 해결
- 버블 정렬
pairwise 비교를 통해 정렬 순서가 마지 않을 시 요소 swap가장 느림
- 선택 정렬
최소값을 찾는 과정 반복 필요 매 → 반복마다 남아있는 요소 재탐색중간
- 삽입 정렬
이미 정렬되어 있는 데이터가 존재가장 빠름
이미 정렬된 상태일 경우 삽입할 위치를 찾는 시간 복잡도 O(1)
정렬된 상태에서 단계별 pivot 이 항상 최솟(최댓)값이므로 발생
선택 정렬과 동일
일반적으로 단계별로 가장 앞(뒤) 요소를 pivot 으로 사용하기 때문
주어진 숫자 형식의 데이터에 대해 보조 배열을 사용하여 각 자리수마다
데이터 보관·인출 과정을 통해 정렬
- 유용한 경우
- 데이터가 정수형
- 여분의 충분한 메모리를 활용 가능