포슀트

πŸŒ“ Binary-Search-Tree

πŸ’« @TODO


Binary-Search-Tree
이진 탐색 트리

이진 탐색 κ°œλ…μ„ κ·Έλž˜ν”„μ˜ 트리 ꡬ쑰 μ‚¬μš©ν•˜μ—¬ ν‘œν˜„
λ§ˆμ°¬κ°€μ§€λ‘œ 각 λ…Έλ“œλŠ” μ΅œλŒ€ 두 개의 μžμ‹ λ…Έλ“œλ₯Ό 가짐

  • μ„±μ§ˆ
    • λͺ¨λ“  λ…Έλ“œλŠ” μ™Όμͺ½ 가지에 ν¬ν•¨λ˜λŠ” μ–΄λ–€ μˆ«μžλ³΄λ‹€ 큰 숫자
    • λͺ¨λ“  λ…Έλ“œλŠ” 였λ₯Έμͺ½ 가지에 ν¬ν•¨λ˜λŠ” μ–΄λ–€ μˆ«μžλ³΄λ‹€ μž‘μ€ 숫자
    • -> λ”°λΌμ„œ μ΅œμƒλ‹¨ λ…Έλ“œλ‘œλΆ€ν„° μ™Όμͺ½ κ°€μ§€λ§Œ μ­‰ 따라가면 μ΅œμ†Œλ…Έλ“œ (μ΅œμ†Ÿκ°’)이 λ‚˜μ˜΄
    • -> λ”°λΌμ„œ μ΅œμƒλ‹¨ λ…Έλ“œλ‘œλΆ€ν„° 였λ₯Έμͺ½ κ°€μ§€λ§Œ μ­‰ 따라가면 μ΅œλŒ€λ…Έλ“œ (μ΅œλŒ“κ°’)이 λ‚˜μ˜΄

μΆ”κ°€

  1. μ΅œμƒλ‹¨ λ…Έλ“œλΆ€ν„°
  2. μΆ”κ°€ν•˜λ €λŠ” λ…Έλ“œκ°€ ν˜„μž¬ λ…Έλ“œ κ°’κ³Ό λΉ„κ΅ν•΄μ„œ μž‘μœΌλ©΄ μ™Όμͺ½, 크면 였λ₯Έμͺ½μœΌλ‘œ 진행
  3. 더 이상 비ꡐ할 수 μ—†μœΌλ©΄ μ •μ°© (λΉ„μ–΄μžˆλŠ” 곳에 μƒˆλ‘œ μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 상황)

μ‚­μ œ

  1. μžμ‹ λ…Έλ“œκ°€ μ—†μœΌλ©΄ λŒ€μƒ λ…Έλ“œλ§Œ μ‚­μ œν•˜λ©΄ 끝
  2. μžμ‹ λ…Έλ“œκ°€ ν•˜λ‚˜λ©΄ μžμ‹ λ…Έλ“œλ₯Ό κΈ°μ‘΄ λ…Έλ“œ μœ„μΉ˜λ‘œ 이동
  3. μžμ‹ λ…Έλ“œκ°€ 두 개 이상이면, μ‚­μ œν•œ λ…Έλ“œμ˜ μ™Όμͺ½ κ°€μ§€μ—μ„œ μ΅œλŒ€ λ…Έλ“œλ₯Ό μ°Ύμ•„ (ν˜Ήμ€ 였λ₯Έμͺ½ κ°€μ§€μ—μ„œ μ΅œμ†Œ λ…Έλ“œλ₯Ό μ°Ύμ•„) κΈ°μ‘΄ λ…Έλ“œ μœ„μΉ˜λ‘œ 이동
    • μ΄λ™ν•œ μžμ‹ λ…Έλ“œκ°€ μžμ‹ λ…Έλ“œλ₯Ό 가지고 있으면, ν•΄λ‹Ή λ…Έλ“œμ— λŒ€ν•΄ 3번 μž¬κ·€μ  반볡

탐색

  1. μ΅œμƒλ‹¨ λ…Έλ“œλΆ€ν„°
  2. μ°ΎμœΌλ €λŠ” μˆ«μžκ°€ ν˜„μž¬ λ…Έλ“œμ™€ λΉ„κ΅ν•΄μ„œ μž‘μœΌλ©΄ μ™Όμͺ½μœΌλ‘œ, 크면 였λ₯Έμͺ½μœΌλ‘œ 진행

탐색, μΆ”κ°€ν•  λ•Œμ˜ 졜적의 μœ„μΉ˜λŠ” μ°ΎλŠ” κ³Όμ •,
트리의 높이 (깊이 λ˜λŠ” 단계) 만큼만 λΉ„κ΅ν•˜λ©΄ λ˜λ―€λ‘œ λ…Έλ“œκ°€ n개 있고 νŠΈλ¦¬κ°€ κ· ν˜•μž‘νžŒ 경우라면 μ΅œλŒ€ Log2N회의 λΉ„κ΅λ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.

단, νŠΈλ¦¬κ°€ μΉ˜μš°μ³μ„œ 직선에 κ°€κΉŒμš΄ λͺ¨μ–‘인 κ²½μš°μ—λŠ” νŠΈλ¦¬κ°€ λ†’μ•„μ Έμ„œ O(N)이 될 μˆ˜λ„ 있음

  • ν™•μž₯
    • μžκ°€ κ· ν˜• 이진 탐색 트리 Self-Balancing Binary Search Tree
      • 항상 κ· ν˜•μ„ μœ μ§€ν•˜λŠ”, 탐색 νš¨μœ¨μ„ μœ μ§€ν•  수 μž‡μŒ
    • B 트리
      • μžμ‹ 수λ₯Ό m개둜 ν™•μž₯ν•΄μ„œ μžμ‹ μˆ˜μ— μ œν•œμ„ 두지 μ•Šκ³  트리의 κ· ν˜•μ„ 도λͺ¨ν•œ B트리


🫧


이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.