Heap

2022. 5. 30. 15:56·2-1/자료구조 (c)
목차
  1. Concepts ; Heap 이란
  2. Priority Queue (우선순위 큐)
  3. Selection tree - Winner tree
  4. Loser tree

Concepts ; Heap 이란

정의 : 여러개의 값들 중에서 가장 큰 값 / 가장 작은 값을 빠르게 탐색하도록 만들어진 binary tree 자료구조

• complete binary tree (완전  이진 트리) 임 ; 맨 아래 레벨 빼고 다 채워져있고, 맨 아래 레벨애들은 왼쪽부터 채워저 있는 것

-> 높이가 h일때 총 노드 개수는 2^h ~ 2^(h+1) -1 가 존재한당 (h-1 높이에서는  2^(h-1) -1 )

( full : 자식이 0개 또는 2개인 것 )

• 부모노드의 키가 자식보다 같거나 크다 (MAX heap) - root 가 젤 큼

( MIN heap은 자식이 더 크겠지용 )

 

기능

• push 

: 해당 값을 완전 이진트리가 되도록 젤 왼쪽 자식 노드에 넣는다

그리고 부모값과 비교해서 계속 바꿔가다가 부모가 더 크거나 같으면 끝~

 

 

• pop

: 루트를 리턴한다 (arr[1])

그리고 자식중 젤 오른쪽에 있는 애를 루트로 데려온다 (완전 이진 트리 만족하기 위함)

자식이 더 크면(둘중암거나) 더 큰애!!랑 바꿔준다 이거 반복

 


Priority Queue (우선순위 큐)

* 큐 = first in first out. (high priority 가진애(=먼저 들어간 애)가 먼저 나온다)

(우선순위가 높다=더앞에 있다. 더 먼저나온다)

우선순위 큐 = 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 자료구조 , 먼저 처리 되는 것 (delete. pop)

힙으로 구현가능! heap-based

(여기선 우선순위가 크다 = 숫자가 더 크다!)

 

맥스 힙 구조 = 우선순위가 높은(숫자 큰)애를 부모에 위치함 -> pop하면 우선순위 젤 높은 루트에 있는 애가 나옴

그래서 우선순위 큐는 힙으로 구현되는 것!

-> O(log n)의 복잡도를 갖게 됨 !

 

* 다른 자료구조를 사용하면

- unordered linear list

맨 뒤 삽입: O(1) (그냥 넣기만 하면되니까) / 가장큰키 가진애 삭제: O(n) (모두 탐색해야됨)

- ordered linear list

삽입: O(n) (다 탐색해서 넣어야 하므로) / 삭제 : O(1) (맨뒤에 있는거 삭제하면 되니까)

 

복잡도 : O(n log n) !!

 


Selection tree - Winner tree

- 트리 초기화

 

 

• 이걸 이용한 정렬

: 승자 = 젤 작은 값. 이걸 순서대로 리턴함 

그리고 그 루트 노드는 트리에서 제거함

이걸 n번 반복하면 정렬된 숫자 배열을 얻을 수 ㅇ

- 복잡도:

트리 초기화 O(n), 승자 찾는 과정 O(log n) (=트리의 height) 이 승자찾기를 n번 -> O(nlogn)

=> O(n*log n) !

위너삭제하고replay : O(log n) , remove/replace 위너 and replay: O(log n)

위너 get : O(1)

 

이런식으로 1 삭제^^ (루트 삭제^^)

 

Loser tree

이기는애 = 더 작은애

패자(더큰애)를 부모에 기록하고

승자를 대결시켜 그 부모에 기록함

굳굳

 

total 초기화 복잡도

-> O(n)

 

replay 복잡도 (요소 하나 바뀔 때)

-> O(log n)

'2-1 > 자료구조 (c)' 카테고리의 다른 글

Hash  (0) 2022.05.31
AVL tree  (0) 2022.05.30
Stack, queue  (0) 2022.04.17
Binary tree  (0) 2022.04.13
Skip List  (0) 2022.04.11
  1. Concepts ; Heap 이란
  2. Priority Queue (우선순위 큐)
  3. Selection tree - Winner tree
  4. Loser tree
'2-1/자료구조 (c)' 카테고리의 다른 글
  • Hash
  • AVL tree
  • Stack, queue
  • Binary tree
jen.dev
jen.dev
🪽🪽🪽
  • jen.dev
    ㅇTL
    jen.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 2-2 (25)
        • 파이썬, 자료구조 (11)
        • 데베시 (3)
        • 컴퓨터 네트워크 (2)
        • 알고리즘 (7)
        • 시스템 프로그래밍 (2)
      • 2-1 (28)
        • 객체지향 - java (14)
        • 자료구조 (c) (14)
      • draft (13)
        • swift (4)
        • html, javascript (8)
        • 리액트네이티브 (0)
        • 주절주절 (1)
        • 빅데이터 (0)
      • life (1)
      • Database (1)
      • Project-Doggy (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jen.dev
Heap

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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