μ•Œκ³ λ¦¬μ¦˜

μ£Όμš” 자료ꡬ쑰의 μ‹œκ°„λ³΅μž‘λ„

μ„œμ•„λž‘πŸ˜ 2025. 2. 7. 23:22

 

 

λ“€μ–΄κ°€λ©°

ν”„λ‘œκ·Έλž˜λ° μ΄ˆμ°½κΈ°μ—λŠ” μ‹œκ°„λ„ μ€‘μš”ν–ˆμ§€λ§Œ, 곡간도 맀우 μ€‘μš”ν–ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ²˜λŸΌ 고사양 λ©”λͺ¨λ¦¬μ™€ ν•˜λ“œλ””μŠ€ν¬λ₯Ό μ €λ ΄ν•œ 가격에 μ‚΄ 수 μ—†μ—ˆκΈ° λ•Œλ¬Έμ΄μ£ . κ·Έλ‹Ήμ‹œμ—λŠ” μš©λŸ‰μ΄ μΆ©λΆ„ν•œ λ©”λͺ¨λ¦¬λ„ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ³€μˆ˜μ™€ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ±°λ‚˜ μ‚¬μš©ν•  λ•Œλ„ λΆˆν•„μš”ν•œ 뢀뢄을 λ§Œλ“€μ§€ μ•Šμ•˜μœΌλ©° ν”„λ‘œκ·Έλž¨ μ‹€ν–‰νŒŒμΌμ˜ μš©λŸ‰λ„ μ€‘μš”ν–ˆμ£ . 컴퓨터가 λ°œμ „ν•˜λ©΄μ„œ μ§€κΈˆμ€ 곡간에 λŒ€ν•œ μ œμ•½μ€ 거의 없닀고해도 λ¬΄λ°©ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‹ˆ λ”μš± μ‹œκ°„μ— λŒ€ν•œ μ€‘μš”λ„κ°€ μ˜¬λΌκ°€κΈ°λ„ ν–ˆμ£ . μ‹œκ°„λ³΅μž‘λ„λŠ” λΉ…μ˜€(Big-O)λΌλŠ” ν‘œν˜„λ°©μ‹μ„ λŒ€λΆ€λΆ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ΄ μ‹€ν–‰λ˜λŠ”λ° κ°€μž₯ μ΅œμ•…μ˜ 쑰건인 μƒνƒœλ‘œ μ–Όλ§ˆλ‚˜ 걸리냐λ₯Ό νŒλ‹¨ν•˜λŠ” μ§€ν‘œμž…λ‹ˆλ‹€. 주둜 μ‚¬μš©ν•˜λŠ” μžλ£Œκ΅¬μ‘°μ— λŒ€ν•œ μ‹œκ°„λ³΅μž‘λ„λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ μ£Όμš” 자료ꡬ쑰의 연산별 μ‹œκ°„λ³΅μž‘λ„μž…λ‹ˆλ‹€.

 


 

λ°°μ—΄ (Array)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(1) O(1)
탐색 (Search) O(n) O(n)
μ‚½μž… (Insert) O(n) O(n)
μ‚­μ œ (Delete) O(n) O(n)
  • 배열은 인덱슀λ₯Ό μ΄μš©ν•œ 접근이 O(1) 둜 빠름.
  • 쀑간 μ‚½μž…/μ‚­μ œ μ‹œ μš”μ†Œλ“€μ„ 이동해야 ν•˜λ―€λ‘œ O(n).

 


 

μ—°κ²° 리슀트 (Linked List)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(n) O(n)
탐색 (Search) O(n) O(n)
μ‚½μž… (Insert) O(1) O(1)
μ‚­μ œ (Delete) O(1) O(1)
  • 단일 μ—°κ²° λ¦¬μŠ€νŠΈλŠ” νŠΉμ • λ…Έλ“œμ— λŒ€ν•œ 접근이 O(n) (순차 탐색 ν•„μš”).
  • κ·ΈλŸ¬λ‚˜ 처음(head)μ΄λ‚˜ 끝(tail)μ—μ„œ μ‚½μž…/μ‚­μ œλŠ” O(1).

 


 

ν•΄μ‹œ ν…Œμ΄λΈ” (Hash Table)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) - O(n)
탐색 (Search) O(1) O(n)
μ‚½μž… (Insert) O(1) O(n)
μ‚­μ œ (Delete) O(1) O(n)
  • ν•΄μ‹œ 좩돌이 λ°œμƒν•˜λ©΄ O(n) (λͺ¨λ“  ν•­λͺ©μ΄ 같은 버킷에 ν• λ‹Ήλœ 경우).
  • μ μ ˆν•œ ν•΄μ‹±κ³Ό 좩돌 ν•΄κ²° 기법(체이닝, 개방 μ£Όμ†Œλ²• λ“±)을 μ‚¬μš©ν•˜λ©΄ ν‰κ· μ μœΌλ‘œ O(1).

 

이진 탐색 트리 (Binary Search Tree, BST)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(log n) O(n)
탐색 (Search) O(log n) O(n)
μ‚½μž… (Insert) O(log n) O(n)
μ‚­μ œ (Delete) O(log n) O(n)
  • νŠΈλ¦¬κ°€ κ· ν˜•μ„ 이루면 O(log n).
  • ν•œμͺ½μœΌλ‘œ 치우친 경우(편ν–₯ 트리) O(n).

βœ… κ· ν˜• 이진 탐색 트리 (AVL, Red-Black Tree)O(log n) 보μž₯.

 


 

νž™ (Heap)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(1) O(1)
μ‚½μž… (Insert) O(log n) O(log n)
μ‚­μ œ (Delete) O(log n) O(log n)
  • μ΅œμ†Œ/μ΅œλŒ€ νž™μ—μ„œ μ΅œμ†Ÿκ°’/μ΅œλŒ“κ°’ 접근은 O(1).
  • μ‚½μž…/μ‚­μ œ μ‹œ νž™ 속성을 μœ μ§€ν•΄μ•Ό ν•˜λ―€λ‘œ O(log n).


 

μŠ€νƒ (Stack)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(n) O(n)
탐색 (Search) O(n) O(n)
μ‚½μž… (Push) O(1) O(1)
μ‚­μ œ (Pop) O(1) O(1)
  • LIFO (Last In, First Out) ꡬ쑰.
  • μ‚½μž…/μ‚­μ œλŠ” topμ—μ„œλ§Œ μˆ˜ν–‰λ˜λ―€λ‘œ O(1).
  • μž„μ˜ μ ‘κ·Όμ΄λ‚˜ 탐색은 μ„ ν˜• 탐색이 ν•„μš”ν•˜λ―€λ‘œ O(n).


 

큐 (Queue)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(n) O(n)
탐색 (Search) O(n) O(n)
μ‚½μž… (Enqueue) O(1) O(1)
μ‚­μ œ (Dequeue) O(1) O(1)
  • FIFO (First In, First Out) ꡬ쑰.
  • μ‚½μž…(Enqueue)κ³Ό μ‚­μ œ(Dequeue)λŠ” O(1).
  • 탐색 및 μž„μ˜ 접근은 O(n).


 

μš°μ„ μˆœμœ„ 큐 (Priority Queue)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(1) O(1)
μ‚½μž… (Enqueue) O(log n) O(log n)
μ‚­μ œ (Dequeue) O(log n) O(log n)
  • μš°μ„ μˆœμœ„κ°€ 높은 μš”μ†Œκ°€ λ¨Όμ € λ‚˜κ°€λŠ” Heap 기반 큐.
  • νž™(Heap)으둜 κ΅¬ν˜„ν•˜λ©΄ μ‚½μž…/μ‚­μ œ O(log n).
  • μ΅œλŒ“κ°’/μ΅œμ†Ÿκ°’ μ‘°νšŒλŠ” O(1).


 

덱 (Deque, Double-Ended Queue)

  평균 μ΅œμ•…
μ ‘κ·Ό (Access) O(n) O(n)
탐색 (Search) O(n) O(n)
μ•žμͺ½ μ‚½μž… (Push front) O(1) O(1)
λ’€μͺ½ μ‚½μž… (Push back) O(1) O(1)
μ•žμͺ½ μ‚­μ œ (Pop front) O(1) O(1)
λ’€μͺ½ μ‚­μ œ (Pop back) O(1) O(1)
  • μ–‘μͺ½μ—μ„œ μ‚½μž…/μ‚­μ œ κ°€λŠ₯.
  • std::deque μ‚¬μš© μ‹œ O(1) 보μž₯.

 


 

κ·Έλž˜ν”„ (Graph)

  인접 ν–‰λ ¬ (Adjacency Matrix) 인접 리슀트 (Adjacency List)
μ €μž₯ 곡간 O(V²) O(V + E)
κ°„μ„  확인 (Check Edge) O(1) O(degree)
인접 λ…Έλ“œ 탐색 O(V) O(degree)
  • V: 정점 개수, E: κ°„μ„  개수.
  • 탐색 μ•Œκ³ λ¦¬μ¦˜:
    • BFS, DFS: O(V + E)
    • λ‹€μ΅μŠ€νŠΈλΌ: O((V + E) log V) (μš°μ„ μˆœμœ„ 큐 μ‚¬μš©)

 


 

정리

  • λΉ λ₯Έ μ ‘κ·Ό: λ°°μ—΄ O(1), ν•΄μ‹œ ν…Œμ΄λΈ” O(1)
  • λΉ λ₯Έ μ‚½μž…/μ‚­μ œ: μ—°κ²° 리슀트 O(1), ν•΄μ‹œ ν…Œμ΄λΈ” O(1)
  • μ •λ ¬λœ 데이터 탐색: 이진 탐색 트리 O(log n)
  • μ΅œμ†Ÿκ°’/μ΅œλŒ“κ°’ μœ μ§€: νž™ O(log n)
  • λ¬Έμžμ—΄ 검색: 트라이 O(m)
  • κ·Έλž˜ν”„ 탐색: DFS/BFS O(V + E)