1 분 소요

📖 우선순위 큐 (Priority Queue)

  • 데이터를 우선순위에 따라서 처리하고 싶을 때 사용
  • 힙(heap)을 이용하여 구현
  • 삽입, 삭제 O(logN)
  • 탐색 O(N)

힙 (Heap)이란?


먼저 힙에 대해서 알아야한다.

힙이란 완전 이진 트리에 있는 노드 중에서 키 값이 가장 큰 노드나 키 값이 가장 작은 노드를 찾기 위해서 만든 자료구조

  • 최대 힙 (Max Heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 힙
    • 루트 노드 : 키 값이 가장 큰 노드
  • 최소 힙 (Min Heap)
    • 부모 노드의 키 값이 자식 노드의 키 값보다 항상 작은 힙
    • 루트 노드 : 키 값이 가장 작은 노드

c++에서 우선순위 큐 사용법


C++ : max-heap

//C++
#include <iostream>
#include <queue>
using namespace std;

priority_queue<int> pq;
pq.push(7);
pq.push(5);
pq.push(4);
printf("size: %d\n", pq.size());
while(!pq.empty()){
  printf("%d\n", pq.top());   //맨 위의 값 출력
  pq.pop();                   //맨 위의 값 삭제(출력은 안함)
}

python에서 우선순위 큐 사용법


Python : min-heap

#Python
"""
#thread-safe 라서 밑에 코드가 더 빠름
from queue import PriorityQueue
q = PriorityQueue()
q.put(7)
q.put(5)
q.put(4)
print("size: ", q.qsize())
while not q.empty():
print(q.get())              #pop
"""
import heapq
heap = []
heapq.heappush(heap, 7)
heapq.heappush(heap, 5)
heapq.heappush(heap, 4)
print("size: ", len(heap))
while len(heap) > 0:
  print(heapq.heappop(heap))

📖 맵 Map (Dictionary)

  • key-value 쌍으로 데이터를 저장
    • key끼리는 중복되지 않음(고유값)
  • 삽입, 삭제, 탐색 O(logN)
  • key는 중복될 수 없음
  • key를 이용해서 value를 얻음
  • key-value 쌍을 Entry라고 함

언어별 Map 내부 구현

Map 내부 구조 언어 CRUD 시간
red-black tree C++, Java(treeMap) O(logN)
hash Python, Swift, Javascript, Java(HashMap) O(1)

관련 설명 링크
red-black tree 블로그_설명 위키피디아 시간은 O(logN)이 걸린다.
hash 블로그_설명 시간은 O(1)이 걸린다.

c++에서 map 사용법


//C++
#include <iostream>
#include <map>
using namespace std;

map<string, int> m;
m["Jiho"] = 1;
m["love"] = 2;
m["bird"] = 3;
printf("size: %d\n", m.size());
for (auto p : m)
  printf("%s, %d\n", p.first.c_str(), p.second);

python에서 map 사용법


#Python
m = {}
m["Jiho"] = 1
m["love"] = 2
m["bird"] = 3
print("size: ", len(m))
for key in m:
  print(key, m[key])

📖 집합 Set

  • 중복되지 않는 데이터를 저장
  • 삽입, 삭제, 탐색 O(logN)

remove() : 삭제