Skip to content

Latest commit

Β 

History

History
74 lines (41 loc) Β· 2.32 KB

File metadata and controls

74 lines (41 loc) Β· 2.32 KB

[자료ꡬ쑰] μ΄μ§„νƒμƒ‰νŠΈλ¦¬ (Binary Search Tree)


μ΄μ§„νƒμƒ‰νŠΈλ¦¬μ˜ λͺ©μ μ€?

이진탐색 + μ—°κ²°λ¦¬μŠ€νŠΈ

이진탐색 : 탐색에 μ†Œμš”λ˜λŠ” μ‹œκ°„λ³΅μž‘λ„λŠ” O(logN), but μ‚½μž…,μ‚­μ œκ°€ λΆˆκ°€λŠ₯

μ—°κ²°λ¦¬μŠ€νŠΈ : μ‚½μž…, μ‚­μ œμ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(1), but νƒμƒ‰ν•˜λŠ” μ‹œκ°„λ³΅μž‘λ„κ°€ O(N)

이 두가지λ₯Ό ν•©ν•˜μ—¬ μž₯점을 λͺ¨λ‘ μ–»λŠ” 것이 'μ΄μ§„νƒμƒ‰νŠΈλ¦¬'

즉, 효율적인 탐색 λŠ₯λ ₯을 가지고, 자료의 μ‚½μž… μ‚­μ œλ„ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€μž



νŠΉμ§•

  • 각 λ…Έλ“œμ˜ μžμ‹μ΄ 2개 μ΄ν•˜
  • 각 λ…Έλ“œμ˜ μ™Όμͺ½ μžμ‹μ€ λΆ€λͺ¨λ³΄λ‹€ μž‘κ³ , 였λ₯Έμͺ½ μžμ‹μ€ λΆ€λͺ¨λ³΄λ‹€ 큼
  • μ€‘λ³΅λœ λ…Έλ“œκ°€ μ—†μ–΄μ•Ό 함

쀑볡이 μ—†μ–΄μ•Ό ν•˜λŠ” μ΄μœ λŠ”?

검색 λͺ©μ  자료ꡬ쑰인데, ꡳ이 쀑볡이 λ§Žμ€ κ²½μš°μ— 트리λ₯Ό μ‚¬μš©ν•˜μ—¬ 검색 속도λ₯Ό 느리게 ν•  ν•„μš”κ°€ μ—†μŒ. (νŠΈλ¦¬μ— μ‚½μž…ν•˜λŠ” 것보닀, λ…Έλ“œμ— count 값을 κ°€μ§€κ²Œ ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ” 것이 훨씬 효율적)


μ΄μ§„νƒμƒ‰νŠΈλ¦¬μ˜ μˆœνšŒλŠ” 'μ€‘μœ„μˆœνšŒ(inorder)' 방식 (μ™Όμͺ½ - 루트 - 였λ₯Έμͺ½)

μ€‘μœ„ 순회둜 μ •λ ¬λœ μˆœμ„œλ₯Ό 읽을 수 있음


BST 핡심연산

  • 검색
  • μ‚½μž…
  • μ‚­μ œ
  • 트리 생성
  • 트리 μ‚­μ œ

μ‹œκ°„ λ³΅μž‘λ„

  • κ· λ“± 트리 : λ…Έλ“œ κ°œμˆ˜κ°€ N개일 λ•Œ O(logN)
  • 편ν–₯ 트리 : λ…Έλ“œ κ°œμˆ˜κ°€ N개일 λ•Œ O(N)

μ‚½μž…, 검색, μ‚­μ œ μ‹œκ°„λ³΅μž‘λ„λŠ” 트리의 Depth에 λΉ„λ‘€


μ‚­μ œμ˜ 3가지 Case

  1. μžμ‹μ΄ μ—†λŠ” leaf λ…Έλ“œμΌ λ•Œ β†’ κ·Έλƒ₯ μ‚­μ œ

  2. μžμ‹μ΄ 1개인 λ…Έλ“œμΌ λ•Œ β†’ μ§€μ›Œμ§„ λ…Έλ“œμ— μžμ‹μ„ 올리기

  3. μžμ‹μ΄ 2개인 λ…Έλ“œμΌ λ•Œ β†’ 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œμ—μ„œ κ°€μž₯ μž‘μ€ κ°’ or μ™Όμͺ½ μžμ‹ λ…Έλ“œμ—μ„œ κ°€μž₯ 큰 κ°’ 올리기


편ν–₯된 트리(μ •λ ¬λœ μƒνƒœ 값을 트리둜 λ§Œλ“€λ©΄ ν•œμͺ½μœΌλ‘œλ§Œ λ»—μŒ)λŠ” μ‹œκ°„λ³΅μž‘λ„κ°€ O(N)μ΄λ―€λ‘œ 트리λ₯Ό μ‚¬μš©ν•  μ΄μœ κ°€ 사라짐 β†’ 이λ₯Ό λ°”λ‘œ μž‘λ„λ‘ λ„μ™€μ£ΌλŠ” κ°œμ„ λœ νŠΈλ¦¬κ°€ AVL Tree, RedBlack Tree


μ†ŒμŠ€ μ½”λ“œ(java)