갬쿠
개미 개발
갬쿠
전체 방문자
오늘
어제
  • ALL (137)
    • React (20)
    • JS & CSS & HTML (29)
    • Algorithm (62)
    • 웹 보안 (11)
    • 달리는 까까: 쿠키런 팬게임 (10)
    • Python (0)
    • 기타 (5)
    • 비공개 플젝 (0)

블로그 메뉴

  • GitHub
  • 방명록
  • 관리자 메뉴

공지사항

인기 글

태그

  • 객체
  • SQL Injection
  • CSS
  • useReducer
  • 쿠키런 팬게임
  • Baekjoon
  • 쿠키런 모작
  • Best of the Best
  • useEffect
  • 리액트
  • 달리는 까까
  • 게임
  • 백준
  • 크롬 공룡 게임
  • 쿠키런
  • Object
  • Python
  • BEAKJOON
  • JavaScript
  • js
  • node.js
  • REACT
  • transform
  • HTML
  • EventListener
  • 모의 해킹
  • useState
  • Programmers
  • 크롬 공룡게임
  • 게임 개발

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갬쿠

개미 개발

Heap
Algorithm

Heap

2023. 3. 10. 00:11

Heap-hop 나는 힙스터다.

 

힙(heap)은 특정한 규칙을 가지는 트리로, 최댓값과 최솟값을 찾는 연산을 빠르게 하기 위해 고안되었다. 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진트리다(최소 힙의 경우).

위의 그림과 같이 힙에는 두 가지 종류가 있다.

  • 최소 힙: 부모 노드의 값이 자식 노드의 값보다 항상 작거나 같음
  • 최대 힙: 부모 노드의 값이 자식 노드의 값보다 항상 크거나 같음

따라서 항상 루트 노드(heap[0])가 최솟값 또는 최댓값이다. 이 특성을 이용해 우선순위 큐와 같은 추상적인 자료형을 구현할 수 있다. 또한 형제 노드간에는 대소 관계가 정해지지 않는다.

 

힙을 직접 구현할 수도 있지만 파이썬에는 최소 힙 알고리즘을 제공하는 heapq 모듈이 있다. heapq 모듈은 리스트를 최소 힙처럼 다룰 수 있도록 한다.

 

heapq — Heap queue algorithm

Source code: Lib/heapq.py This module provides an implementation of the heap queue algorithm, also known as the priority queue algorithm. Heaps are binary trees for which every parent node has a va...

docs.python.org

위 문서에서 heapq 모듈이 제공하는 함수를 확인할 수 있다.

 

다만 heapq 모듈은 최소 힙으로 구현되어 있기 때문에 최대 힙을 사용하려면 추가적인 작업이 필요하다.

해결법은 아래와 같이 힙에 값을 넣을 때 부호를 변경해서 넣어준 후 꺼낼 때 다시 부호를 바꿔주는 것이다. 

import heapq

heap = []
values = [1,2,3,4,5]

for v in values:
	heapq.heappush(heap, -v)

for i in range(5):
	print(-heapq.heappop(heap))

위 코드를 실행하면 5,4,3,2,1이 출력된다. 

728x90

'Algorithm' 카테고리의 다른 글

[11279] 최대 힙 - Python  (0) 2023.03.10
[1927] 최소 힙 - Python  (0) 2023.03.10
[13913] 숨바꼭질 4 - Python  (0) 2023.03.02
[12852] 1로 만들기 2 - Python  (0) 2023.03.02
[1525] 퍼즐 - Python  (0) 2023.03.01
    'Algorithm' 카테고리의 다른 글
    • [11279] 최대 힙 - Python
    • [1927] 최소 힙 - Python
    • [13913] 숨바꼭질 4 - Python
    • [12852] 1로 만들기 2 - Python
    갬쿠
    갬쿠
    보안&소프트웨어 전공 프론트엔드 개발자

    티스토리툴바