[c++] μ•Œκ³ λ¦¬μ¦˜ κ°œλ…κ³΅λΆ€ :: 자료ꡬ쑰 - νž™

νž™

  1. μš©λ„

  2. κ΅¬ν˜„

  3. μ’…λ₯˜

  4. μ—°μ‚°

  5. μ •λ ¬

 

νž™

νž™μ€ 좔상적 μžλ£Œν˜•μΈ μš°μ„ μˆœμœ„ 큐λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ λ§Œλ“€μ–΄μ§„ μžλ£Œκ΅¬μ‘°μ΄λ‹€.

partial-ordering (λΆ€λΆ„ μ •λ ¬)을 λ§Œμ‘±ν•˜λŠ” left-complete binary tree (쒌츑 μ™„μ „ 이진 트리) 이닀.

λΆ€λΆ„ 정렬을 λ§Œμ‘±ν•œλ‹€λŠ” 말은 'λΆ€λͺ¨ λ…Έλ“œμ™€ μžμ‹λ…Έλ“œ' κ°„μ—λŠ” νŠΉμ • λŒ€μ†Œκ΄€κ³„ μ„±λ¦½ν•˜μ§€λ§Œ, 'ν˜•μ œλ…Έλ“œ'κ°„μ—λŠ” ν•΄λ‹Ή λŒ€μ†Œκ΄€κ³„κ°€ μ„±λ¦½ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” λœ»μ΄λ‹€.

이진 탐색 νŠΈλ¦¬μ—μ„œλŠ” μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ νž™ νŠΈλ¦¬μ—μ„œλŠ” ν—ˆμš©ν•œλ‹€.

 

μš©λ„

 νž™μ€ 좔상적 μžλ£Œν˜•μΈ μš°μ„ μˆœμœ„ 큐λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ λ§Œλ“€μ–΄μ§„ μžλ£Œκ΅¬μ‘°μ΄λ‹€. λ°°μ—΄κ³Ό μ—°κ²°λ¦¬μŠ€νŠΈλ₯Ό μ΄μš©ν•˜λ©΄ μ‚½μž…κ³Ό μ‚­μ œ μ—°μ‚° 쀑 ν•˜λ‚˜κ°€ O(n)일 수 밖에 μ—†λ‹€. ν•˜μ§€λ§Œ νž™μ„ μ΄μš©ν•˜λ©΄ κ°€μž₯ 큰 κ°’μ΄λ‚˜ κ°€μž₯ μž‘μ€ 값을 λ‘˜ λ‹€ O(logn)λ§Œμ— λΉ λ₯΄κ²Œ 찾을 수 μžˆλ‹€.

이와 같은 νŠΉμ„± λ•Œλ¬Έμ— νž™ μ •λ ¬μ΄λΌλŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλ„ 쓰인닀.

 

κ΅¬ν˜„

νž™μ€ λ°°μ—΄, μ—°κ²°λ¦¬μŠ€νŠΈ μ΄λ ‡κ²Œ 2가지 λ°©λ²•μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€. 트리 κ΅¬ν˜„κ³Ό λΉ„μŠ·ν•˜κ²Œ λŒ€λΆ€λΆ„ 배열을 μ‚¬μš©ν•œλ‹€. μžμ„Έν•œ κ΅¬ν˜„ λ‚΄μš©μ€ 이진 νŠΈλ¦¬μ—μ„œμ˜ κ΅¬ν˜„κ³Ό κ°™λ‹€.

 

μ’…λ₯˜

  • μ΅œλŒ€ νž™

  • μ΅œμ†Œ νž™

    μ΅œλŒ€ νž™μ€ λΆ€λͺ¨ λ…Έλ“œκ°€ μžμ‹ λ…Έλ“œλ³΄λ‹€ 큰, μ΅œμ†Œ νž™μ€ λΆ€λͺ¨ λ…Έλ“œκ°€ μžμ‹ λ…Έλ“œλ³΄λ‹€ μž‘κ±°λ‚˜ 같은 partial ordering이 μ„±λ¦½ν•œλ‹€. total ordering은 λ§Œμ‘±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

 

μ—°μ‚°

  • μ‚½μž…

    μ‚½μž… μ—°μ‚° μ‹œ κ°€μž₯ 말단(λ§ˆμ§€λ§‰ index)에 μ‚½μž…ν•œ ν›„ λΆ€λͺ¨ λ…Έλ“œλ“€κ³Ό 순차적으둜 λ ˆλ²¨μ„ μ˜¬λΌκ°€λ©΄μ„œ 비ꡐ/κ΅ν™˜ν•΄μ„œ νž™μ˜ μ„±μ§ˆμ„ λ§Œμ‘±ν•˜λ„λ‘ μˆ˜μ •ν•œλ‹€.

    νž™μ˜ λ†’μ΄λŠ” μ™„μ „ 이진 νŠΈλ¦¬μ΄λ―€λ‘œ logn이닀. λ”°λΌμ„œ μ‚½μž… μ—°μ‚°μ˜ λ³΅μž‘λ„λŠ” O(logn)이닀.

  • μ‚­μ œ

    νž™μ—μ„œμ˜ μ‚­μ œ 연산은 루트 λ…Έλ“œλ₯Ό μ œκ±°ν•˜λŠ” 것이닀. 루트 λ…Έλ“œ μ‚­μ œ ν›„ 빈 μžλ¦¬μ— κ°€μž₯ 말단 λ…Έλ“œλ₯Ό μ±„μš΄ ν›„ μžμ‹ λ…Έλ“œλ“€κ³Ό 순차적으둜 λ ˆλ²¨μ„ λ‚΄λ €κ°€λ©΄μ„œ 비ꡐ/κ΅ν™˜ν•΄μ„œ leaf nodeκΉŒμ§€ λ‚΄λ €κ°„λ‹€.

    μ‚­μ œ μ—°μ‚° λ˜ν•œ νž™μ˜ 높이에 λΉ„λ‘€ν•˜λ―€λ‘œ λ³΅μž‘λ„κ°€ O(logn)이닀.

 

μ •λ ¬

 νž™μ„ ν†΅ν•΄μ„œ μ–΄λ–€ 데이터λ₯Ό μ •λ ¬ν•˜λ €λ©΄ νž™ 자료ꡬ쑰λ₯Ό λ§Œμ‘±ν•˜κ²Œ κ΅¬μ„±ν•˜κ³ , 루트 λ…Έλ“œμ—μ„œ μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© μ‚­μ œν•΄κ°€λ©΄μ„œ λ‹€μ‹œ νž™ ꡬ쑰둜 λ§Œλ“œλŠ” κ±Έ λ°˜λ³΅ν•˜λ©΄ λœλ‹€.

 μ΄ λ•Œ, λ°μ΄ν„°μ˜ 갯수만큼 이 과정을 λ°˜λ³΅ν•˜κ³ , 이 κ³Όμ •μ˜ μ‹œκ°„λ³΅μž‘λ„κ°€ μœ„μ—μ„œ μ„€λͺ…ν–ˆλ“―이 O(logn)μ΄λ―€λ‘œ, 전체 μ‹œκ°„λ³΅μž‘λ„λŠ” O(nlong)이닀.

λ°˜μ‘ν˜•