Algorithm/Study

[Algorithm] νž™(Heap)

ν˜Έλ°€μ΄ 2022. 6. 26. 15:15

πŸ“Œ νž™(Heap)μ΄λž€?

  • μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•΄ κ³ μ•ˆλœ 자료ꡬ쑰
  • νž™μ€ μ΅œλŒ€νž™, μ΅œμ†Œνž™μœΌλ‘œ λ‚˜λˆ μ§‘λ‹ˆλ‹€.
  • νž™ νŠΈλ¦¬μ—μ„œλŠ” μ€‘λ³΅λœ 값을 ν—ˆμš©ν•œλ‹€. (이진 탐색 νŠΈλ¦¬μ—μ„œλŠ” μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.)
  • μ‹œκ°„λ³΅μž‘λ„ = O(log n)

βœ… μ΅œλŒ€νž™

λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 ν¬κ±°λ‚˜ 같은 μ™„μ „ 이진 트리

key(λΆ€λͺ¨) >= key(μžμ‹)

 

βœ… μ΅œμ†Œνž™

λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 μž‘κ±°λ‚˜ 같은 완진 μ΄μ§„νŠΈλ¦¬

key(λΆ€λͺ¨) <= key(μžμ‹)

 

πŸ€ νž™μ˜ κ΅¬ν˜„

  • νž™μ„ μ €μž₯ν•˜λŠ” ν‘œμ€€μ μΈ μžλ£Œκ΅¬μ‘°λŠ” 배열이닀.
  • κ΅¬ν˜„μ„ μ‰½κ²Œν•˜κΈ° μœ„ν•˜μ—¬ λ°°μ—΄μ˜ 첫 번째 인덱슀인 0은 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.
  • νŠΉμ • μœ„μΉ˜μ˜ λ…Έλ“œ λ²ˆν˜ΈλŠ” μƒˆλ‘œμš΄ λ…Έλ“œκ°€ μΆ”κ°€λ˜μ–΄λ„ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • 루트 λ…Έλ“œμ˜ 였λ₯Έμͺ½ λ…Έλ“œμ˜ λ²ˆν˜ΈλŠ” 항상 3이닀.
  • λΆ€λͺ¨ λ…Έλ“œμ™€ μžμ‹ λ…Έλ“œμ˜ 관계
    • μ™Όμͺ½ μžμ‹ 인덱슀 = (λΆ€λͺ¨μ˜ 인덱슀) * 2 
    • 였λ₯Έμͺ½ μžμ‹ 인덱슀 = (λΆ€λͺ¨μ˜ 인덱슀) * 2 + 1 
    • λΆ€λͺ¨μ˜ 인덱슀 = (μžμ‹μ˜ 인덱슀) / 2

βœ… μ‚½μž… μ—°μ‚°

  1. μ‚½μž…ν•˜κ³ μž ν•˜λŠ” 값을 트리의 κ°€μž₯ λ§ˆμ§€λ§‰ μ›μ†Œμ— μΆ”κ°€ν•œλ‹€.
  2. λΆ€λͺ¨ λ…Έλ“œμ™€μ˜ λŒ€μ†Œκ΄€κ³„λ₯Ό λΉ„κ΅ν•˜λ©΄μ„œ λ§Œμ‘±ν•  λ•ŒκΉŒμ§€ 자리 κ΅ν™˜μ„ λ°˜λ³΅ν•œλ‹€.

βœ… μ‚­μ œ μ—°μ‚°

  1. νž™μ—μ„œλŠ” 루트 λ…Έλ“œλ§Œ μ‚­μ œκ°€ κ°€λŠ₯ν•˜λ―€λ‘œ 루트 λ…Έλ“œλ₯Ό μ œκ±°ν•œλ‹€.
    1. μ΅œλŒ€ νž™μ—μ„œ μ‚­μ œ 연산은 μ΅œλŒ“κ°’μ„ 가진 μš”μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 것이닀.
  2. μ‚­μ œλœ 루트 λ…Έλ“œμ—λŠ” νž™μ˜ λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό κ°€μ Έμ˜¨λ‹€.
  3. μžμ‹λ…Έλ“œμ™€ λΉ„κ΅ν•˜μ—¬ 쑰건이 λ§Œμ‘±ν•  λ•ŒκΉŒμ§€ μ΄λ™μ‹œν‚¨λ‹€.

 

πŸ“ μΆ”κ°€μžλ£Œ

 

'Algorithm > Study' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Algorithm] ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table)  (0) 2022.06.09
[μΊμ‹œ μ•Œκ³ λ¦¬μ¦˜] LRU (Least Recently Used Algorithm)  (0) 2022.02.10