[Python] 우선순위 큐와 힙 (Priority Queue & Heap)

2024. 12. 2. 21:41·BackEnd/Python
반응형

 

우선순위 큐 (Priority Queue)

 

우선순위 큐는 큐(Queue) 자료구조의 변형으로, 각 요소가 우선순위(priority)를 가지고 있습니다.

큐에서 데이터를 꺼낼 때 우선순위가 가장 높은 요소가 먼저 나옵니다.

일반적인 큐는 FIFO(선입선출) 방식으로 작동하지만, 우선순위 큐는 우선순위에 따라 데이터를 처리합니다.

 

힙 (Heap)

 

힙은 이진 트리(Binary Tree) 기반의 완전 이진 트리(Complete Binary Tree)입니다.

 

이진 트리란?

- 각 노드가 최대 두 개의 자식 노드를 가지는 트리 구조입니다.

 

완전 이진트리란?

- 말단 노드를 제외하고 모든 노드가 2개의 자식을 갖고 있는 이진 트리입니다.

 

 

 

각 노드가 특정한 규칙을 따르는 트리 자료구조입니다.

 

힙은 각 노드가 하위 노드보다 크거나 작은 우선순위를 가집니다.

최대 힙에서는 부모 노드가 자식 노드보다 항상 크고, 최소 힙에서는 부모 노드가 자식 노드보다 항상 작습니다.

 

힙은 우선순위 큐를 구현하는 데 자주 사용됩니다.

최대 힙(Max Heap)과 최소 힙(Min Heap) 두 가지 유형이 있습니다.

 

최대 힙 : 부모 노드가 자식 노드보다 크거나 같습니다.
최소 힙 : 부모 노드가 자식 노드보다 작거나 같습니다.

 

 

최소 힙 Python 예시 코드

 

import heapq

# 힙 생성 (리스트를 힙으로 변환)
heapq.heapify(list) # 시간 복잡도 : O(n)

# 원소 추가
heapq.heappush(heap, item) # 시간 복잡도 : O(log n)

# 원소 삭제 및 변환
heapq.heappop(heap) # 시간 복잡도 : O(log n)

 

최대 힙 Python 예시 코드

 

import heapq

heap = [-n for n in nums] # 

# 힙 생성 (리스트를 힙으로 변환)
heapq.heapify(list) # 시간 복잡도 : O(n)

# 원소 추가
heapq.heappush(heap, -item) # 시간 복잡도 : O(log n)

# 원소 삭제 및 변환
-heapq.heappop(heap) # 시간 복잡도 : O(log n)

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'BackEnd > Python' 카테고리의 다른 글

[Python] 선형 탐색(Linear Search) 이진 탐색 (Binary Search)  (0) 2024.12.07
[Python] 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)  (0) 2024.12.06
[Python] 해시 테이블 (Hash Table)  (0) 2024.12.02
[Python] 스택, 큐, 데크  (0) 2024.11.27
[Python] 한 번에 여러 개 입력(input) 받기  (0) 2024.11.15
'BackEnd/Python' 카테고리의 다른 글
  • [Python] 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)
  • [Python] 해시 테이블 (Hash Table)
  • [Python] 스택, 큐, 데크
  • [Python] 한 번에 여러 개 입력(input) 받기
Dev Chu
Dev Chu
  • Dev Chu
    Log_Double 7
    Dev Chu
  • 전체
    오늘
    어제
    • LOG LIST (201)
      • log Double 7 (2)
        • notice (1)
        • 회고록 (1)
      • Study (112)
        • 과제 (2)
        • 코딩 테스트 (105)
        • 대규모 시스템 설계 기초 (5)
      • CS (10)
        • 자료구조 & 알고리즘 (4)
        • Design Pattern (2)
        • TIL (4)
      • FrontEnd (26)
        • HTML & CSS (16)
        • JavaScript & jQuery (9)
        • React (1)
      • BackEnd (24)
        • Java (4)
        • Python (6)
        • Database (0)
        • Spring (6)
      • Infra & DevOps (3)
        • AWS (3)
        • Git (8)
      • Project (4)
        • repo_bis (2)
        • WhiteMonday (2)
      • ETC (20)
        • TIP (13)
        • Error (5)
        • SQLD (2)
  • 블로그 메뉴

    • 코딩 테스트
  • 링크

    • GitHub
  • 공지사항

    • Log Double 7
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Dev Chu
[Python] 우선순위 큐와 힙 (Priority Queue & Heap)
상단으로

티스토리툴바