[μ•Œκ³ λ¦¬μ¦˜] 6κ°• - 탐색(1)

2026. 4. 8. 15:09Β·πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅/πŸ§¬μ•Œκ³ λ¦¬μ¦˜

βœ… 1. 순차 탐색

(1) 탐색 κ΄€λ ¨ κΈ°λ³Έ κ°œλ…

  • 탐색: μ—¬λŸ¬ 개의 μ›μ†Œλ‘œ κ΅¬μ„±λœ 데이터듀 쀑 μ›ν•˜λŠ” 값을 κ°–λŠ” μ›μ†Œλ₯Ό μ°ΎλŠ” 것을 μ˜λ―Έν•¨.
  • 데이터 ν˜•νƒœ: μ£Όμ–΄μ§€λŠ” μ—¬λŸ¬ 개의 μ›μ†Œλ“€μ€ 리슀트, 트리, κ·Έλž˜ν”„ λ“±μ˜ μ—¬λŸ¬ λ°μ΄ν„°μ˜ μ§‘ν•©μ˜ ν˜•νƒœλ₯Ό 가짐.
  • νƒμƒ‰μ˜ μ’…λ₯˜: μ™ΈλΆ€ 탐색, λ‚΄λΆ€ 탐색 으둜 ꡬ뢄이 κ°€λŠ₯함.
  • κ΄€λ ¨ μ—°μ‚°: 탐색을 톡해 μ›ν•˜λŠ” μ›μ†Œλ₯Ό μ°Ύμ•„μ„œ μ΄ˆκΈ°ν™”, μ‚½μž…, μ‚­μ œ λ“±μ˜ 연산을 μΆ”κ°€μ μœΌλ‘œ μ§„ν–‰ ν•  수 있음.

(2) 순차 탐색 μ΄λž€?

  • 순차 탐색: 리슀트 ν˜•νƒœλ‘œ μ£Όμ–΄μ§„ 데이터듀을 μ²˜μŒλΆ€ν„° ν•˜λ‚˜μ”© 순차적으둜 λΉ„κ΅ν•˜λ©΄μ„œ μ›ν•˜λŠ” 값을 μ°ΎλŠ” 방법

(3) 순차 탐색 - 탐색 μ—°μ‚°

  • 탐색 μ—°μ‚°: λ°°μ—΄μ˜ 크기만큼 λ°˜λ³΅μ„ λŒλ©΄μ„œ 찾고자 ν•˜λŠ” κ°’κ³Ό 순차적으둜 λΉ„κ΅ν•˜λ©΄μ„œ 탐색을 μ§„ν–‰ν•˜λ©° 데이터λ₯Ό 찾음.

(4) 순차 탐색 - μ‚½μž… μ—°μ‚°

  • μ‚½μž… μ—°μ‚°: λ‹¨μˆœν•˜κ²Œ λ§ˆμ§€λ§‰ μ›μ†Œμ— 데이터λ₯Ό μ‚½μž…ν•˜λŠ” μ—°μ‚°μž„.

(5) 순차 탐색 - μ‚­μ œ μ—°μ‚°

  • μ‚­μ œ μ—°μ‚°: μ‚­μ œν•  μ›μ†Œ 순차 νƒμƒ‰μœΌλ‘œ μ°Ύκ³  μ‚­μ œλ₯Ό μ§„ν–‰ ν•œ λ’€, λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό μ‚­μ œ 된 μΈλ±μŠ€μ— λ„£λŠ” μ—°μ‚°μž„.
  • λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό μ‚­μ œ 된 μΈλ±μŠ€μ— λ„£λŠ” μ΄μœ λŠ”, λ°°μ—΄ 쀑간에 빈 곡간이 생기면 μ•ˆλ˜κΈ° λ•Œλ¬Έμž„.

(6) 순차 탐색 - μ—°κ²° 리슀트둜 κ΅¬ν˜„λœ 경우

  • μ—°κ²° 리슀트 경우: μ‚½μž…μ˜ 경우 λ‹¨μˆœνžˆ μ—°κ²°λ¦¬μŠ€νŠΈμ˜ 맨 μ•ž 뢀뢄에 μ‚½μž…μ„ ν•΄μ£Όλ©΄ 되고, μ‚­μ œμ˜ 경우 μ‚­μ œ 된 μ „ν›„ λ…Έλ“œλ₯Ό μ—°κ²°ν•΄μ£Όλ©΄ 됨.

(7) 순차 탐색 - μ„±λŠ₯κ³Ό νŠΉμ§•

  • 탐색 O(n): 탐색 μ„±κ³΅μ˜ 경우 1번~n번 비ꡐ가 λ˜μ§€λ§Œ, 탐색 μ‹€νŒ¨μ˜ 경우 항상 n 번 비ꡐ가 되기 λ•Œλ¬Έμ— O(n)μž„.
  • μ‚­μ œ O(n): μ‚­μ œν•  μ›μ†Œμ˜ 순차 탐색 O(n) μ§„ν–‰ ν›„ λ§ˆμ§€λ§‰ μ›μ†Œμ˜ 이동은 O(1) μ΄λ―€λ‘œ, O(n) μž„.
  • μ‚½μž… O(1): 리슀트 λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•˜κΈ° λ•Œλ¬Έμ— μƒμˆ˜ μ‹œκ°„λ§Œμ„ μš”κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— O(1) μž„.
  • μ •λ ¬λ˜μ§€ μ•Šκ³  크기가 μž‘μ€ 데이터에 적합: λͺ¨λ“  리슀트 ν˜•νƒœμ˜ μž…λ ₯에 적용이 κ°€λŠ₯ν•˜λ©°, λΉ„μ •λ ¬ 데이터 탐색에 μ ν•©ν•˜κ³ , 탐색과 μ‚­μ œμ‹œ O(n) μ‹œκ°„μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— 데이터가 큰 κ²½μš°μ—λŠ” 뢀적합 ν•  수 있음.

βœ… 2. 이진 탐색

(1) 이진 탐색 μ΄λž€?

  • 이진 탐색: μ •λ ¬λœ 리슀트의 μ›μ†Œλ“€μ„ μ ˆλ°˜μ”© λ‚˜λˆ„λ©΄μ„œ μ›ν•˜λŠ” 값을 μ°Ύμ•„κ°€λŠ” 탐색 λ°©λ²•μž„.
  • μ—°κ²° 리슀트 ν˜•νƒœμ—μ„  이진 탐색이 λΆˆκ°€λŠ₯ν•˜λ©°, 였직 λ°°μ—΄μ—μ„œλ§Œ κ°€λŠ₯ν•˜κ³  뢄할정볡 방법이 μ μš©λ˜μ–΄ 있음.
  • 탐색 방법: λ°°μ—΄μ˜ κ°€μš΄λ° κ°’κ³Ό 탐색 킀값을 비ꡐ ν›„ λ™μΌν•˜λ‹€λ©΄ 탐색 μ„±κ³΅μœΌλ‘œ λ°˜ν™˜μ΄ λ˜μ§€λ§Œ, λ™μΌν•˜μ§€ μ•Šκ³  탐색킀가 κ°€μš΄λ° 값보닀 μž‘λ‹€λ©΄ μ™Όμͺ½ λ°°μ—΄μ—μ„œ κ°€μš΄λ°κ°’μ„ 반볡 λΉ„κ΅ν•˜λ©°, λ§Œμ•½ 탐색킀가 κ°€μš΄λ° 값보닀 크닀면 였λ₯Έμͺ½ λ°°μ—΄μ—μ„œ κ°€μš΄λ°κ°’μ„ 반볡 비ꡐλ₯Ό ν•˜λ©° 탐색을 함.

(2) 이진 탐색 - 탐색 μ—°μ‚°

  • 탐색 μ—°μ‚°: μž¬κ·€ 호좜 방식을 μ΄μš©ν•˜λ©°, 킀값에 λŒ€ν•œ μ›μ†Œλ₯Ό μ°Ύμ•„κ°ˆ λ•Œ 배열을 μ ˆλ°˜μ”© μ€„μ—¬κ°€λŠ” 탐색 방법을 μ‚¬μš©ν•¨.
  • μ‹œκ°„λ³΅μž‘λ„ O(logn): μ ˆλ°˜μ”© μͺΌκ°œκ°€λ©΄μ„œ 반볡 비ꡐλ₯Ό ν•˜κΈ° λ•Œλ¬Έμ—, μ‹œκ°„λ³΅μž‘λ„λŠ” O(logn) 이 될 수 있음.

(3) 이진 탐색 - μ΄ˆκΈ°ν™” μ—°μ‚°

  • μ΄ˆκΈ°ν™” μ—°μ‚°: 이진 탐색은 μ£Όμ–΄μ§„ 배열에 λŒ€ν•΄μ„œ 항상 정렬이 λ˜μ–΄μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 쑰건이 있기 λ•Œλ¬Έμ—, μ •λ ¬ν•˜λŠ” 과정을 μ΄ˆκΈ°ν™” μ—°μ‚°μœΌλ‘œ λ³Ό 수 있음.

(4) 이진 탐색 - μ‚½μž… μ—°μ‚°

  • μ‚½μž… μ—°μ‚°: 이진 νƒμƒ‰μ˜ λ‘œμ§μ„ ν™œμš©ν•΄ μ‚½μž…ν•  μœ„μΉ˜λ₯Ό μ°Ύμ•„μ£ΌλŠ” μž‘μ—…μ„ λ¨Όμ € μ§„ν–‰ν•˜λ©°, μΆ”κ°€μ μœΌλ‘œ μ‚½μž…μ΄ 될 μœ„μΉ˜λ‘œλΆ€ν„° λ‹€μŒ 인덱슀의 μš”μ†Œλ“€μ„ 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™ν•˜κ³ , μ‚½μž…μ΄ 될 μœ„μΉ˜μ— μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ” κ³Όμ •μž„.
  • 이진 탐색 λ‘œμ§μ„ ν™œμš©ν•΄ μ°Ύκ³ , 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™ν•˜λŠ” μ΄μœ λŠ” μ •λ ¬λœ μƒνƒœλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•¨μž„.
  • μ‹œκ°„λ³΅μž‘λ„ O(n): 이진 탐색은 O(logn) 의 μ‹œκ°„μ„ κ°€μ§€μ§€λ§Œ, 이후, μ›μ†Œ μ‚½μž…μ΄ λ˜λŠ” μœ„μΉ˜ 였λ₯Έμͺ½ μ›μ†Œλ“€μ„ 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈ μ”©μ΄λ™ν•˜λŠ” 연산이 λ“€μ–΄κ°€κΈ° λ•Œλ¬Έμ— O(n) 의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€κ²Œ 됨.

  • μ˜ˆμ‹œλ₯Ό λ“€λ©΄, 쀑간값인 index 3 = 40 을 작고, μ‚½μž… μ›μ†Œ(45) 와 비ꡐλ₯Ό ν•œ λ’€ 40보닀 크기 λ•Œλ¬Έμ— 였λ₯Έμͺ½ λ°°μ—΄μ˜ 쀑간값인 index 5 = 60 κ³Ό 45λ₯Ό 또 비ꡐ ν•œ λ’€, 60보단 μž‘κΈ° λ•Œλ¬Έμ— μ™Όμͺ½ λ°°μ—΄μ˜ index 4 = 50 κ³Ό 비ꡐλ₯Ό μ§„ν–‰ν•˜κ²Œ λ˜λŠ”λ°, μ΄λ•Œ μ™Όμͺ½ 뢀뢄배열은 이미 탐색이 μ™„λ£Œλœ μƒνƒœμ΄λ―€λ‘œ, 50보닀 큰 λͺ¨λ“  데이터듀을 였λ₯Έμͺ½μœΌλ‘œ ν•œ μΉΈμ”© λ°€κ³  κ·Έ μžλ¦¬μ— μ‚½μž…ν•˜λŠ” μ›λ¦¬μž„.

(5) 이진 탐색 - μ‚­μ œ μ—°μ‚°

  • μ‚­μ œ μ—°μ‚°: μ‚­μ œν•  μ›μ†Œλ₯Ό κ°€μ§€κ³  이진 탐색을 μ§„ν–‰ν•΄ μ‚­μ œν•˜λŠ” 방식이며, μ‚­μ œκ°€ 된 μ›μ†Œμ˜ 빈 μΈλ±μŠ€μ—λŠ” 였λ₯Έμͺ½μ˜ λͺ¨λ“  μš”μ†Œλ“€μ„ μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈμ”© 이동을 μ‹œν‚€λ©°, μ •λ ¬μƒνƒœλ₯Ό μœ μ§€ ν•˜κ²Œ 됨.
  • μ‹œκ°„λ³΅μž‘λ„ O(n): 이진 탐색 과정은 O(logn) 의 μ‹œκ°„μ„ κ°–μ§€λ§Œ, 이후 μ‚­μ œ κ³Όμ •μ—μ„œ μ›μ†Œλ₯Ό μ™Όμͺ½μœΌλ‘œ ν•œ μΉΈμ”© μ΄λ™μ‹œν‚€λ©° μ •λ ¬μƒνƒœλ₯Ό μœ μ§€ν•˜κΈ° λ•Œλ¬Έμ— O(n) 의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 가짐.

(6) 이진 탐색 - μ—°κ²° 리슀트 κ΅¬ν˜„μ‹œ

  • μ—°κ²° 리슀트 κ΅¬μ‘°μ—μ„œ μ‚½μž…κ³Ό μ‚­μ œλŠ” 효율적으둜 κ°€λŠ₯ν•˜κ² μ§€λ§Œ, 결과적으둜 이진 탐색 μžμ²΄κ°€ λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ, 성립이 μ•ˆλ¨.

(7) 이진 탐색 - μ„±λŠ₯κ³Ό νŠΉμ§•

  • 탐색 μ—°μ‚°: O(logn) μ‹œκ°„λ³΅μž‘λ„λ₯Ό 가짐.
  • μ΄ˆκΈ°ν™” μ—°μ‚°: O(nlogn) 이며, μ΄μœ λŠ” μ •λ ¬ μˆ˜ν–‰μ˜ κ²°κ³Όκ°€ O(nlogn) μž„.
  • μ‚½μž…/μ‚­μ œ μ—°μ‚°: O(n) λ°°μ—΄μ˜ μ›μ†Œλ₯Ό λ°€μ–΄μ£ΌκΈ° λ•Œλ¬Έμ— O(n) 만큼의 μ‹œκ°„μ΄ κ±Έλ¦Ό.
  • μ •λ ¬λœ λ¦¬μŠ€νŠΈμ— λŒ€ν•΄μ„œλ§Œ 적용이 κ°€λŠ₯ν•œ νŠΉμ§•μ΄ 있음.
  • μ‚½μž…κ³Ό μ‚­μ œκ°€ λΉˆλ²ˆν•œ κ²½μš°μ—λŠ” O(n) 의 데이터 이동이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λΆ€μ ν•©ν•˜κΈ° λ•Œλ¬Έμ— 데이터가 μž‘μ€ κ²½μš°μ— 적합함.
  • TIP: μ‚½μž…κ³Ό μ‚­μ œκ°€ λΉˆλ²ˆν•œ κ²½μš°μ—λ„ 이진 탐색을 μ μš©ν•˜κ³ μž ν•΄μ„œ λ‚˜μ˜¨κ²Œ 이진 탐색 트리 κ°œλ…μž„.

βœ… 3. 이진 탐색 트리

(1) 이진 탐색 νŠΈλ¦¬λž€?

  • 이진 트리: μ΅œλŒ€ 두 개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§€λŠ” 계측적인 트리 λͺ¨μ–‘μ˜ 자료ꡬ쑰λ₯Ό μ˜λ―Έν•œλ‹€.
  • 이진 탐색 트리: 이진 트리의 κ°œλ…μ— λΆ€λͺ¨ λ…Έλ“œμ˜ μ™Όμͺ½ μžμ‹ λ…Έλ“œλŠ” λΆ€λͺ¨λ³΄λ‹€ μž‘μ€ κ°’, 였λ₯Έμͺ½μ€ λΆ€λͺ¨λ³΄λ‹€ 큰 κ°’μ˜ νŠΉμ§•μ„ λ”ν•œ 이진 νŠΈλ¦¬μ—μ„œ 탐색을 μœ„ν•΄ μ—…κ·Έλ ˆμ΄λ“œ 된 자료ꡬ쑰둜 λ³Ό 수 μžˆλ‹€.
  • λ˜ν•œ, 이진 탐색 트리의 경우 μ—°κ²° 리슀트 ν˜•νƒœμ˜ ν¬μΈνŒ… ꡬ쑰λ₯Ό κ°€μ§€λŠ” νŠΉμ§•μ΄ 있음.

(2) 이진 탐색 트리 - 탐색 μ—°μ‚°

  • 탐색 μ—°μ‚°: 트리 ꡬ쑰가 μ£Όμ–΄μ§€κ³ , 찾고자 ν•˜λŠ” ν‚€κ°’ 이 μ£Όμ–΄μ§ˆ λ•Œ, 루트 λ…Έλ“œλΆ€ν„° 비ꡐλ₯Ό ν•˜λ©΄μ„œ λ‚΄λ €κ°€λ©° 탐색을 진행함.
  • 예λ₯Όλ“€λ©΄, ν‚€κ°’(40) κ³Ό 루트 λ…Έλ“œ(50) κ³Ό 비ꡐ ν›„ 50보닀 μž‘κΈ° λ•Œλ¬Έμ— μ™Όμͺ½ μžμ‹ λ…Έλ“œλ‘œ λ‚΄λ €κ°€κ²Œ 되고, μ™Όμͺ½ μžμ‹λ…Έλ“œ(30) κ³Ό ν‚€κ°’(40)을 비ꡐ ν›„ 30보닀 크기 λ•Œλ¬Έμ— 였λ₯Έμͺ½ λ…Έλ“œλ‘œ λ‚΄λ €κ°€λŠ” μ‹μœΌλ‘œ 데이터λ₯Ό 탐색을 진행함.

(3) 이진 탐색 트리 - μ‚½μž… μ—°μ‚°

  • μ‚½μž… μ—°μ‚°: μ‚½μž…ν•  μ›μ†Œλ₯Ό κΈ°μ€€μœΌλ‘œ 탐색을 μ‹€μ‹œν•˜κ³ , 탐색이 μ‹€νŒ¨ν•  λ•Œ ν•΄λ‹Ή μœ„μΉ˜μ— μƒˆ λ…Έλ“œλ₯Ό μΆ”κ°€ν•˜λŠ” μ—°μ‚°μž„.
  • μ‚½μž… μ—°μ‚° μ˜ˆμ‹œ: μ‚½μž…ν•  μ›μ†Œ 65λ₯Ό 루트 λ…Έλ“œλΆ€ν„° λΉ„κ΅ν•˜λ©΄μ„œ λ‚΄λ €μ˜€κ²Œ 되고, λ§ˆμ§€λ§‰ 70κ³Ό 비ꡐ ν›„ μ™Όμͺ½ λ…Έλ“œλ‘œ κ°€λŠ”λ°, μžμ‹ λ…Έλ“œκ°€ μ—†λŠ” 경우(잎 λ…Έλ“œ)이기 λ•Œλ¬Έμ—, μ΄λ•ŒλŠ” 탐색에 ν•΄λ‹Ή 값이 μ—†λ‹€κ³  νŒλ‹¨ν•΄ ν•΄λ‹Ή μœ„μΉ˜μ— 값을 μ‚½μž…ν•¨.

(4) 이진 탐색 트리 - μ‚­μ œ μ—°μ‚°

  • ν›„μ†μž λ…Έλ“œ: μ–΄λ–€ λ…Έλ“œμ˜ λ°”λ‘œ λ‹€μŒ 킀값을 κ°–λŠ” λ…Έλ“œλ‘œ μ‰½κ²Œ 말해, ν•΄λ‹Ή λ…Έλ“œμ˜ 값보닀 더 큰 κ°’μ΄λ©΄μ„œ λ‹€λ₯Έ λ…Έλ“œλ³΄λ‹€λŠ” μž‘μ€ 값을 의미 ν•  수 있음.
  • μœ„μ˜ μ˜ˆμ‹œλ₯Ό 보면 10의 ν›„μ†μž λ…Έλ“œλŠ” 20, 20의 ν›„μ†μž λ…Έλ“œλŠ” 30... 순으둜 ν›„μ†μž λ…Έλ“œλ₯Ό μ•Œ 수 있음.

  • μ‚­μ œ μ—°μ‚°: μ‚­μ œ μ—°μ‚°μ˜ 경우 μ‚­μ œλ˜λŠ” λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œμ˜ κ°œμˆ˜μ— 따라 κ΅¬λΆ„ν•΄μ„œ 처리λ₯Ό ν•˜λŠ”λ°, μ‰½κ²Œ 말해 μžμ‹ λ…Έλ“œκ°€ 0개, 1개, 2개 이 μ„Έκ°€μ§€ κ²½μš°μ— λ”°λΌμ„œ 각각 λ‹€λ₯΄κ²Œ μ‚­μ œ 연산이 μ²˜λ¦¬κ°€ 됨.

  • μ‚­μ œ μ—°μ‚° - μžμ‹ λ…Έλ“œκ°€ μ—†λŠ” 경우: μžμ‹ λ…Έλ“œκ°€ μ—†μœΌλ―€λ‘œ, λ‹¨μˆœνžˆ μ‚­μ œλ§Œ ν•˜λ©΄ 끝남. ( 20을 κ·Έλƒ₯ μ‚­μ œ ν•˜λ©΄ 됨. )

  • μ‚­μ œ μ—°μ‚° - μžμ‹ λ…Έλ“œκ°€ 1개인 경우: λ…Έλ“œ 40을 μ‚­μ œν•˜λŠ” 경우 40을 탐색 ν›„ μ‚­μ œν•œ λ’€, κ·Έ λ°‘μ˜ μ„œλΈŒνŠΈλ¦¬(50, 45)λ₯Ό μ‚­μ œ 된 λ…Έλ“œμ˜ μœ„μΉ˜λ‘œ 올리면 끝남.

  • μ‚­μ œ μ—°μ‚° - μžμ‹ λ…Έλ“œκ°€ 2개인 경우: 30을 μ‚­μ œν•˜κ³ , κ·Έ μœ„μΉ˜μ—λŠ” 30의 ν›„μ†μž λ…Έλ“œμΈ 40을 올리게 되며, 이후 λ…Έλ“œκ°€ ν•œ 개인 κ²½μš°κ°€ 되기 λ•Œλ¬Έμ— κΈ°μ‘΄ 40의 μœ„μΉ˜μ— 있던 μ„œλΈŒνŠΈλ¦¬λ₯Ό κ·Έ 자리둜 올리면 끝남.

(5) 이진 탐색 트리 - μ„±λŠ₯κ³Ό νŠΉμ§•

  • 탐색, μ‚½μž…, μ‚­μ œ 연산은 μ ˆλ°˜μ”© μ€„μ΄λŠ” 이진 탐색을 기반으둜 ν•˜κ³  있기 λ•Œλ¬Έμ—, 트리 ꡬ쑰둜 보면 킀값을 λΉ„κ΅ν•˜λŠ” νšŸμˆ˜μ— λΉ„λ‘€ν•΄μ„œ μ—°μ‚°μ˜ 횟수λ₯Ό μ˜ˆμƒ ν•  수 μžˆλ‹€.
  • 즉, μ‹œκ°„ λ³΅μž‘λ„λŠ” 킀값을 λΉ„κ΅ν•˜λŠ” νšŸμˆ˜μ— λΉ„λ‘€ν•œ κ°’μœΌλ‘œ λ³Ό 수 있으며, 이것은 이진 트리의 높이와 동일함을 μ•Œ 수 있음.
  • 결둠은 평균 μˆ˜ν–‰μ‹œκ°„μ€ O(logn) 이며, μ΅œμ•…μ˜ μˆ˜ν–‰μ‹œκ°„μ€ 편ν–₯ 이진 트리(경사 이진 트리) 둜, λ°μ΄ν„°μ˜ 개수만큼 탐색을 μ§„ν–‰ ν•  수 있기 λ•Œλ¬Έμ— O(n) 이 λœλ‹€.

  • μ‚½μž… μ—°μ‚°: 경우 트리 λ‚΄λΆ€μ˜ λ…Έλ“œ 이동이 없이 잎 λ…Έλ“œμ— μ‚½μž…λ§Œ 진행함.
  • μ‚­μ œ μ—°μ‚°: 경우 λ…Έλ“œλ₯Ό μ‚­μ œ ν›„, κ·Έ 곡간을 μ±„μš°κΈ° μœ„ν•΄ λ‹€λ₯Έ λ…Έλ“œλ₯Ό μƒμˆ˜ 번만 이동을 μ‹œν‚΄.
  • 즉, μ‚½μž…/μ‚­μ œ μ—°μ‚° μ‹œ κΈ°μ‘΄ λ…Έλ“œμ˜ 이동이 거의 λ°œμƒν•˜μ§€ μ•ŠλŠ” λ‹€λŠ” νŠΉμ§•μ΄ 있음.
  • μ›μ†Œμ˜ μ‚½μž…κ³Ό μ‚­μ œ 연산이 반볡 진행이 될 λ•Œ, 편ν–₯ 트리 ν˜•νƒœκ°€ 될 수 μžˆλŠ” κ°€λŠ₯성이 μ‘΄μž¬ν•¨.
  • κ· ν˜• 탐색 트리: 이진 탐색 νŠΈλ¦¬λŠ” μ΅œμ•…μ˜ μˆ˜ν–‰μ‹œκ°„μΈ O(n) 을 κ°€μ§ˆ κ°€λŠ₯성이 μ‘΄μž¬ν•˜λ©°, 편ν–₯ νŠΈλ¦¬κ°€ λ§Œλ“€μ–΄μ§€μ§€ μ•Šλ„λ‘ 트리의 κ· ν˜•μ„ μœ μ§€ν•΄ O(logn) 을 보μž₯ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 κ· ν˜• 탐색 트리이며, 탐색 트리의 μ„œλΈŒνŠΈλ¦¬ λΆ€λΆ„μ˜ 밸런슀λ₯Ό λ§žμΆ°μ£Όκ±°λ‚˜ 높이λ₯Ό λ§žμΆ°μ„œ κ· ν˜•μ„ μœ μ§€ν•¨μœΌλ‘œμ¨, 편ν–₯ 트리λ₯Ό 막고 있음. ( 2-3-4 트리, λ ˆλ“œλΈ”λž™νŠΈλ¦¬, B 트리 등이 있음. )

βœ… 4. 2-3-4 트리

(1) 2-3-4 νŠΈλ¦¬λž€?

  • 2-3-4 트리: 이진 탐색 트리의 μ‚½μž…/μ‚­μ œ 연산에 따라 편ν–₯ νŠΈλ¦¬κ°€ λ˜λŠ” 것을 막기 μœ„ν•΄ λ“±μž₯ν•œ κ· ν˜• 탐색 νŠΈλ¦¬μ΄λ‹€.
  • μ‰½κ²Œ 말해, ν•˜λ‚˜μ˜ λ…Έλ“œμ— μ—¬λŸ¬κ°œμ˜ ν‚€λ₯Ό κ°€μ§ˆ 수 있으며, ν‚€κ°’μ˜ κ°œμˆ˜μ— 따라 μžμ‹ λ…Έλ“œμ˜ κ°œμˆ˜λ„ μ—¬λŸ¬κ°œ κ°€μ§ˆ 수 있음.
  • 2-λ…Έλ“œ, 3-λ…Έλ“œ, 4-λ…Έλ“œλ‘œ ꡬ성이 되며, 각각 1~3개의 킀와 2~4개의 μžμ‹ λ…Έλ“œλ₯Ό κ°–λŠ” νŠΉμ§•μ„ κ°€μ§€κ³  있음.

  • 3-λ…Έλ“œ: 경우 μœ„μ™€ 같이 2개의 ν‚€λ₯Ό κ°€μ§€λ©°, 3개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§ˆ 수 있음.
  • 4-λ…Έλ“œ: 3개의 킀와 4개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λ…Έλ“œλ₯Ό μ˜λ―Έν•¨.

(2) 2-3-4 트리 - 탐색 μ—°μ‚°

  • 탐색 μ—°μ‚°: 이진 νŠΈλ¦¬μ™€ λ™μΌν•œ λ°©μ‹μœΌλ‘œ 탐색을 μ§„ν–‰ν•˜λ©°, λ…Έλ“œμ˜ 킀값은 μ—¬λŸ¬κ°œ 쑴재 ν•  수 있기 λ•Œλ¬Έμ— 각 킀값이 κ°€μ§€λŠ” λ²”μœ„μ—μ„œ 크고 μž‘κ³ λ₯Ό νŒλ‹¨ν•΄ 탐색을 진행함.

(3) 2-3-4 트리 - μ‚½μž… μ—°μ‚°

  • μ‚½μž… μ—°μ‚°: 이진 탐색 νŠΈλ¦¬μ™€ λ™μΌν•˜κ²Œ 탐색 κ³Όμ •(크고 μž‘κ³  비ꡐ ν›„)을 거친 ν›„, 잎 λ…Έλ“œμ— λ„λ‹¬ν•˜λ©΄ ν•΄λ‹Ή μœ„μΉ˜μ— μ‚½μž…ν•¨.
  • ν•˜μ§€λ§Œ, 4-λ…Έλ“œ(킀값이 3개, μžμ‹ λ…Έλ“œ 4개인 경우) λ₯Ό λ§Œλ‚˜κ²Œ 되면, 탐색 κ³Όμ •μ—μ„œ 항상 λ…Έλ“œ λΆ„ν•  μš°μ„ μ μœΌλ‘œ μˆ˜ν–‰ν•¨.
  • λ…Έλ“œ λΆ„ν• : μ‚½μž…μ„ μ§„ν–‰ν•˜κΈ° μ „ 탐색과정을 μ§„ν–‰ ν•  λ•Œ, 4-λ…Έλ“œλ₯Ό λ§Œλ‚˜κ²Œ 되면, ν•΄λ‹Ή 4-λ…Έλ“œμ˜ κ°€μš΄λ° 킀값을 λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€κ°’μœΌλ‘œ μ˜¬λ¦¬λŠ” 것을 μ˜λ―Έν•¨.
  • κ²°λ‘ : νƒμƒ‰κ³Όμ •μ—μ„œ 4-λ…Έλ“œμ— λŒ€ν•œ λ…Έλ“œ 뢄할을 μ§„ν–‰ν•œ λ’€, 이진 탐색 νŠΈλ¦¬μ™€ λ™μΌν•˜κ²Œ 잎 λ…Έλ“œμ— μ‚½μž…μ„ 진행함.

(4) 2-3-4 트리 - μ‚½μž… μ—°μ‚° μ˜ˆμ‹œ

  • (1) λ¨Όμ € μœ„μ˜ 킀값을 μˆœμ„œλŒ€λ‘œ 2-3-4 νŠΈλ¦¬μ— μ‚½μž…μ„ μ§„ν–‰
  • (2) 50 μ‚½μž…: λ…Έλ“œ 생성 및 ν‚€κ°’ 50 μ‚½μž…
  • (3) 55 μ‚½μž…: 50κ³Ό 비ꡐ ν›„ 55κ°€ 더 크기 λ•Œλ¬Έμ—, 50의 였λ₯Έμͺ½ ν‚€κ°’μœΌλ‘œ μ‚½μž….
  • (4) 30 μ‚½μž…: 30은 50, 55보닀 μž‘κΈ° λ•Œλ¬Έμ— 맨 μ™Όμͺ½ ν‚€κ°’μœΌλ‘œ μ‚½μž….
  • (5) 10 μ‚½μž…: 4-λ…Έλ“œ(30,50,55)λ₯Ό λΆ„ν• ν•˜κ²Œ 된 ν›„, λŒ€μ†Œ 비ꡐ ν›„ μˆ«μžμ— λ§žλŠ” μœ„μΉ˜μ— μ‚½μž…μ„ 진행함.
  • 4-λ…Έλ“œμ— λŒ€ν•΄μ„œ λΆ„ν•  과정을 μ œμ™Έν•˜λ©΄, λ‚˜λ¨Έμ§€λŠ” 이진 탐색 트리의 μ‚½μž… μ—°μ‚°κ³Ό λ™μΌν•˜κ²Œ 진행됨.

(5) 2-3-4 트리 - μ„±λŠ₯κ³Ό νŠΉμ§•

  • 탐색, μ‚½μž…, μ‚­μ œ μ—°μ‚° μ‹œκ°„ λ³΅μž‘λ„ O(logn): 이진 탐색 트리의 경우 탐색 κ³Όμ •λ§Œ logn 의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ‘Œκ³  μ‚½μž…κ³Ό μ‚­μ œ μ—°μ‚°μ—λŠ” 편ν–₯ νŠΈλ¦¬κ°€ λ§Œλ“€μ–΄μ Έ O(n) 의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λ¬Έμ œκ°€ 있음.
  • ν•˜μ§€λ§Œ, 2-3-4 νŠΈλ¦¬λŠ” 이진 탐색 트리λ₯Ό κ°œμ„ ν•œ κ· ν˜• 탐색 트리둜써 탐색, μ‚½μž…, μ‚­μ œ μ—°μ‚° λͺ¨λ‘ O(logn) 의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 가짐.
  • μ‚½μž…/μ‚­μ œκ°€ μΌμ–΄λ‚˜λ„ 편ν–₯ νŠΈλ¦¬κ°€ λ˜μ§€ μ•ŠμŒ: 4-λ…Έλ“œ μƒνƒœμ—μ„œ μ‚½μž… μ—°μ‚°μ—λŠ” 뢄할을 μ§„ν–‰ν•˜κ³ , 루트 λ…Έλ“œκ°€ 뢄할될 μ‹œμ—λ§Œ λͺ¨λ“  λ…Έλ“œμ˜ 레벨이 1μ”© μ¦κ°€ν•˜κΈ° λ•Œλ¬Έμ— 편ν–₯νŠΈλ¦¬κ°€ μ•ˆλ§Œλ“€μ–΄μ§.
  • 문제점: 2-3-4 트리λ₯Ό κ·ΈλŒ€λ‘œ κ΅¬ν˜„ν•˜λ©΄ 2, 3, 4 λ…Έλ“œ λ“±μœΌλ‘œ λ…Έλ“œ ꡬ쑰가 λ‚˜λ‰˜μ–΄ λ³΅μž‘ν•΄μ§€κΈ° λ•Œλ¬Έμ— 이진 탐색 νŠΈλ¦¬λ³΄λ‹€ 더 느렀질 κ°€λŠ₯성이 많으며, μ΄λŸ¬ν•œ 2-3-4 트리λ₯Ό 이진 탐색 트리둜 λ³€κ²½ν•œ νŠΈλ¦¬λŠ” λ ˆλ“œ λΈ”λž™ νŠΈλ¦¬μž„.
  • μ‰½κ²Œ 말해, 2-3-4 νŠΈλ¦¬λŠ” ν•œ λ…Έλ“œμ— κ°’ μ΅œλŒ€ 3κ°œκΉŒμ§€ μ‘΄μž¬ν•˜λ©°, μžμ‹ μ΅œλŒ€ 4κ°œκΉŒμ§€ 쑴재 ν•  μˆ˜κ°€ μžˆμ–΄μ„œ 비ꡐ μ—°μ‚°μ‹œ λ…Έλ“œ λ‚΄λΆ€μ—μ„œ μ—¬λŸ¬ 값을 λΉ„κ΅ν•˜κ²Œ λœλ‹€. 즉, λ…Έλ“œ λ‚΄λΆ€ 비ꡐ λΉ„μš©μ΄ 증가해 BST λŠ” 1번 비ꡐ ν•  λ•Œ, 2-3-4 νŠΈλ¦¬λŠ” μ΅œλŒ€ 3λ²ˆκΉŒμ§€ 비ꡐ함 ν•œ 단계 λ‚΄λ €κ°ˆ λ•Œ λΉ„μš©μ΄ 더 큰 λ¬Έμ œκ°€ 있음. κ·Έλž˜μ„œ 보톡 2-3-4 νŠΈλ¦¬λŠ” 직접 μ•ˆμ“°κ³  λ ˆλ“œ-λΈ”λž™ 트리둜 λ³€ν™˜ν•΄μ„œ μ‚¬μš©ν•¨.

'πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ > πŸ§¬μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[μ•Œκ³ λ¦¬μ¦˜] 8κ°• - κ·Έλž˜ν”„(1)  (0) 2026.04.21
[μ•Œκ³ λ¦¬μ¦˜] 7κ°• - 탐색(2)  (0) 2026.04.14
[μ•Œκ³ λ¦¬μ¦˜] 5κ°• - μ •λ ¬(3)  (0) 2026.03.25
[μ•Œκ³ λ¦¬μ¦˜] 4κ°• - μ •λ ¬(2)  (0) 2026.03.24
[μ•Œκ³ λ¦¬μ¦˜] 3κ°• - μ •λ ¬(1)  (0) 2026.03.05
'πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅/πŸ§¬μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [μ•Œκ³ λ¦¬μ¦˜] 8κ°• - κ·Έλž˜ν”„(1)
  • [μ•Œκ³ λ¦¬μ¦˜] 7κ°• - 탐색(2)
  • [μ•Œκ³ λ¦¬μ¦˜] 5κ°• - μ •λ ¬(3)
  • [μ•Œκ³ λ¦¬μ¦˜] 4κ°• - μ •λ ¬(2)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (230)
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (84)
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ’»μ»΄ν“¨ν„°κ³Όν•™ 개둠 (15)
        • πŸ”’μžλ£Œκ΅¬μ‘° (14)
        • πŸ§¬μ•Œκ³ λ¦¬μ¦˜ (10)
        • βš™οΈμš΄μ˜μ²΄μ œ (12)
        • πŸ•ΈοΈμ΄μ‚°μˆ˜ν•™ (10)
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (11)
        • πŸ–₯️컴퓨터과학과 (1)
      • πŸ› οΈBackend (71)
        • πŸ“šλ°±μ—”λ“œ 곡뢀 (5)
        • β˜•Java (23)
        • 🌳Spring (13)
        • βš™οΈC (12)
        • ⚑Python (15)
        • JavaScript (1)
        • πŸ›’οΈDatabase (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (64)
      • 정보 (2)
      • 정리가 ν•„μš”ν•œ κΈ€ (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    λ°©μ†‘λŒ€
    파이썬
    Python
    μ΄μ‚°μˆ˜ν•™
    Java
    컴퓨터과학 개둠
    μ»΄ν“¨ν„°μ˜ 이해
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    자료ꡬ쑰
    μžλ°”
    ν•¨μˆ˜
    λ°°μ—΄
    μœ λΉ„μΏΌν„°μŠ€
    spring
    운영체제
    컴퓨터과학과
    κ·Έλž˜ν”„
    Cμ–Έμ–΄
    λ°©ν†΅λŒ€
    μ•Œκ³ λ¦¬μ¦˜
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[μ•Œκ³ λ¦¬μ¦˜] 6κ°• - 탐색(1)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”