[CLRS] [6-2] Maintaining the heap property

2024. 10. 29. 01:19· CS Study/CLRS (자료구조 | 알고리즘)
목차
  1. 0. Review
  2. 1. Max-Heapify
  3. 2. Max-Heapify Code
  4. 3. Time Complexity

0. Review

- 6-1 에서 우리는 Heap을 알아가는 동안 Max-Heap에 대해서 알아보았다.

- 이번 챕터에서는 Max-Heap을 유지하게 해주는 Max-Heapify 에 대해서 알아볼 것이다. 

1. Max-Heapify

- Max-Heapify 절차는 최댓값 힙 속성을 유지한다.

- 입력값은 배열 A, 그리고 배열의 인덱스 i를 받는다.

- Max-Heapify는 LEFT(i), RIGHT(i)로 시작하는 Heap들이 이미 Max Heap이라는 것을 가정한다. 

- 하지만 A[i]가 자식노드보다 작을 경우 Max-Heap을 만족하지 않는다.

- 그래서 A[i]를 아래에 있는 노드로 계속 흘려보내면서 Max-Heap을 만족하게 한다.

- 다음 그림은 Max-Heapify의 동작을 보여준다.

 

- (a)상황을 한번 보자. A[i](8)가 왼쪽노드(14)보다 작기 때문에 위치를 바꿔준 것을 볼 수 있다.

- 하지만, 바꿔주고 나서 왼쪽 Heap이 Max-Heap이라는 것이 자명하지 않기 때문에, 

- 다시 한번 (b),(c) 에서 Max-Heapify를 재귀적으로 사용함을 알 수 있다.

 

2. Max-Heapify Code

- 앞서 설명한 Max_heapify을 파이썬으로 한번 구현해보자.

def max_heapify(arr,i):
    left_node = 2*i
    right_node = 2*i+1
    
    if (left_node <= len(arr)-1) and arr[left_node] > arr[i]:
        largest = left_node
    else:
        largest = i
        
    if (right_node <= len(arr)-1) and arr[right_node] > arr[largest]:
        largest = right_node
        
    if largest != i:
        arr[i],arr[largest] = arr[largest] , arr[i]
        max_heapify(arr,largest)

 

3. Time Complexity

- 해당 재귀함수를 점화식으로 나타내면 다음과 같다.

T(n) <= T(2n/3) + theta(1)

- 이를 Master Theorem으로 구하면 

- T(n) = O(log n)이 된다. 

- 이를 토대로 힙정렬은 O(nlogn)이 된다는걸 간접적으로 유추가능하다.

 

'CS Study > CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글

[CLRS] [6-4] Heapsort (힙정렬)  (0) 2024.10.29
[CLRS] [6-3] Building a heap  (0) 2024.10.29
[CLRS] [6-1] Heaps (힙)  (0) 2024.10.28
[CLRS] [5-1~4] The hiring Problem (고용 문제) [생략]  (0) 2024.09.11
[CLRS] [4-6] Proof of the continuous master theorem  (0) 2024.09.09
  1. 0. Review
  2. 1. Max-Heapify
  3. 2. Max-Heapify Code
  4. 3. Time Complexity
'CS Study/CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글
  • [CLRS] [6-4] Heapsort (힙정렬)
  • [CLRS] [6-3] Building a heap
  • [CLRS] [6-1] Heaps (힙)
  • [CLRS] [5-1~4] The hiring Problem (고용 문제) [생략]
23학번이수현
23학번이수현
23학번이수현
밑바닥부터 시작하는 AI보안전문가
23학번이수현
전체
오늘
어제
  • 분류 전체보기 (243)
    • Statistic Study (47)
      • Mathematical Statistics(수리통.. (47)
    • Mathematics Study (15)
      • Linear Algebra (선형대수학) (15)
    • CS Study (74)
      • CLRS (자료구조 | 알고리즘) (49)
      • Database(DB) (11)
      • C++ (11)
      • 컴퓨터 구조 (2)
      • MongoDB (1)
    • DS Study (56)
      • CS 229(Machine Learning) (19)
      • CS 224n(NLP) (5)
      • Web Scraping (7)
      • R4DS(R언어) (20)
      • 밑바닥부터 시작하는 딥러닝 1 (5)
    • Hacking Study (0)
      • Web Hacking (0)
    • 코딩테스트 (5)
      • 백준-Python (5)
    • Paper Review(논문 리뷰) (43)
      • Deep Learning (16)
      • TCGA 관련 논문 (4)
      • Computer Vision (18)
      • NLP (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AI
  • 수리통계학
  • clrs
  • 자료구조
  • C++
  • web scraping
  • Machine Learning
  • 정렬
  • 백준
  • 딥러닝
  • LSTM
  • cs 224n
  • Linear Algebra
  • 논문 리뷰
  • cs229
  • deep learning
  • 알고리즘
  • Algorithms
  • Data Structure
  • db
  • 시간복잡도
  • R4DS
  • graph
  • 데이터분석
  • NLP
  • introduction to algoritmhs
  • R언어
  • 파이썬
  • 선형대수학
  • Introduction to Algorithms

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
23학번이수현
[CLRS] [6-2] Maintaining the heap property
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.