Computer Science/알고리즘 2

[C++] 우선순위큐 - 최대힙, 최소힙

우선순위큐(priority queue)우선순위큐(default 최대 힙)는 삽입된 요소에 대해 우선순위가 높은 데이터를 먼저 가져오는 형식의 자료구조다. 우선순위큐는 주로 힙 자료구조를 기반으로 구현된다. 힙(heap)힙은 완전이진트리의 일종으로 우선순위큐를 위해 만들어진 자료구조다.최대값/최소값을 빠르게 찾아내도록 만들어졌다.최대힙에서는 최대값, 최소힙에서는 최소값을 O(1)의 시간복잡도로 빠르게 접근할 수 있다.삽입과 삭제 연산은 트리의 높이에 비례하기 때문에 O(log N)의 시간복잡도를 가진다.이진탐색트리에서는 중복된 값을 허용하지 않는 반면 힙 트리에서는 중복된 값을 허용한다.힙은 최대힙과 최소힙 형태로 나뉜다. 최대힙부모노드의 키 값이 자식노드의 키 값보다 크거나 같은 완전이진트리부모노드의 키..

[Python] 그래프 - 위상 정렬 알고리즘

위상 정렬순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘방향 그래프의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열하는 것위상 정렬을 수행하게 되는 예시: 선수과목을 고려한 학습 순서 결정 진입 차수 / 진출 차수진입 차수(Indegree): 특정 노드로 들어오는 간선의 개수진출 차수(Outdegree): 특정 노드에서 나가는 간선의 개수 위상 정렬 알고리즘큐를 이용한 동작 과정이다.진입차수가 0인 노드를 큐에 넣는다.큐가 빌 때까지 다음의 과정을 반복한다.i) 큐에서 원소를 꺼내 해당 노드에서 출발하는 간선을 그래프에서 제거한다.ii) 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.이때 모든 원소를 방문하기 전에 큐가 빈다면 사이클이 존재한다고 판단할 수 있다..