Big-O 증가율
선의 모양은 증가율을 보여주고, 커서는 선택한 입력 크기의 값을 읽습니다.
1
5
32
160
1,024
Data Structures & Algorithms
이 페이지는 DSA I 노트에 있는 내용만 다룹니다. Java review, Iterator/Comparator, Big-O, ArrayList, Recursion과 Binary Search, LinkedList, Stack, Queue입니다.
Module 0 · 기초
Java 문법, generics, wrapper type, Iterable, Iterator, Comparable, Comparator를 JS/TS와 연결해 정리했습니다.
Module 0 · Big-O
Big-O는 worst-case growth에 대한 가장 타이트한 upper bound로 사용하고, 상수와 낮은 차수 항은 제거합니다.
Module 1
ArrayList는 backing array를 사용하고, 중간 삽입/삭제에서 원소를 shift하며, 꽉 차면 더 큰 배열로 복사합니다. 재귀는 base case와 base case로 향하는 변화가 필요합니다.
Module 2
LinkedList는 random access를 포기하는 대신 포인터 갱신으로 데이터를 조작합니다. SLL, DLL, CLL의 edge case와 비용을 비교했습니다.
Module 3
Stack은 한쪽 끝만 사용하고, Queue는 뒤에 넣고 앞에서 뺍니다. ArrayQueue는 circular array를 쓰며 resize 때 unwrap합니다.
선의 모양은 증가율을 보여주고, 커서는 선택한 입력 크기의 값을 읽습니다.
1
5
32
160
1,024
연산을 고른 뒤 적용하면 위치 변화가 보입니다.
factorial(4)를 호출하고 반환을 기다립니다.
목표값: 19. 19 > 13이므로 mid까지의 왼쪽 절반을 제외합니다.
1. low 0, mid 3, high 6: 19 > 13이므로 mid까지의 왼쪽 절반을 제외합니다.
Stack은 한쪽 top에서만 변하고, Queue는 back으로 들어가 front에서 나갑니다.
Stack / LIFO
Queue / FIFO
backing array가 가득 차면 더 큰 배열을 만들고 기존 원소를 복사한 뒤 새 데이터를 넣습니다.
Module 1 · ArrayList
각 recursive call은 더 작은 call을 기다립니다. base case가 반환되면 call stack이 거꾸로 풀립니다.
Module 1 · Recursion
ArrayQueue는 front index를 유지합니다. Enqueue는 (front + size) % capacity에 들어가고, dequeue는 front를 modulo로 한 칸 이동합니다.
Module 3 · Stack & Queue
Module 0 · 기초
Iterator(hasNext/next)를 사용합니다. Iterable을 구현해야 enhanced for loop에서 동작합니다.
Comparable은 타입의 자연 정렬(compareTo)을 정의하고, Comparator는 외부에서 교체 가능한 정렬 규칙입니다.
Module 0 · Big-O
worst-case growth에 대한 가장 타이트한 upper bound입니다. 상수와 낮은 차수 항은 제거합니다.
꼭 그렇지는 않습니다. Big-O에서는 상수와 낮은 차수 항을 버리지만 실무에서는 체감될 수 있습니다.
Module 1
addToBack은 가끔만 resize하지만, addAtIndex는 뒤쪽 원소를 모두 한 칸씩 오른쪽으로 밀어야 합니다.
base case와 그쪽으로 향하는 진행이 필요합니다. Binary search는 매 단계 탐색 범위를 절반으로 줄입니다.
Module 2
SLL은 head부터 걸어가 새 tail을 찾아야 하지만, DLL은 tail.prev를 바로 읽습니다.
head 포인터 하나만 유지하고 data-swap trick으로 front와 back을 모두 O(1)에 접근합니다.
Module 3
Stack은 LIFO로 한쪽 끝만 쓰고, Queue는 FIFO로 back에 넣고 front에서 뺍니다.
(front + size) % capacity입니다. circular array이고 resize 때 더 큰 배열로 unwrap합니다.