맨위로가기

우선순위 큐

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

우선순위 큐는 각 요소에 연결된 우선순위에 따라 요소가 처리되는 추상 자료형이다. 주요 연산으로는 큐가 비어 있는지 확인하는 `is_empty`, 우선순위와 함께 요소를 추가하는 `insert_with_priority`, 최고 우선순위 요소를 제거하고 반환하는 `pull_highest_priority_element`, 최고 우선순위 요소를 큐에서 수정 없이 반환하는 `peek` 등이 있다.

우선순위 큐는 연관 배열, 힙, 특수 힙, 정렬된 리스트 등 다양한 방식으로 구현될 수 있으며, 구현 방식에 따라 삽입, 삭제, 검색 연산의 시간 복잡도가 달라진다. 힙 기반 구현은 일반적으로 삽입 및 제거에 O(log n)의 성능을 제공한다.

우선순위 큐는 다익스트라 알고리즘, 프림 알고리즘과 같은 그래프 알고리즘, 운영 체제의 프로세스 관리, 데이터 압축의 허프만 부호화, 이산 사건 시뮬레이션, 라우터의 대역폭 관리 등 다양한 분야에서 활용된다. 병렬 처리를 통해 우선순위 큐의 성능을 향상시킬 수 있으며, 동시 접근, k-element 연산 등을 지원하는 병렬 우선순위 큐 구현도 존재한다.

더 읽어볼만한 페이지

  • 추상 자료형 - 리스트 (컴퓨팅)
    리스트는 컴퓨터 과학에서 항목들을 순서대로 저장하고 관리하는 기본적인 자료 구조이며, 다양한 연산을 지원하고 연결 리스트나 동적 배열 등으로 구현되며 큐, 스택 등 다른 자료형의 기반이 된다.
  • 추상 자료형 - 스택
    스택은 후입선출(LIFO) 원칙에 따라 데이터를 관리하는 추상 자료형으로, push 연산으로 데이터를 쌓고 pop 연산으로 가장 최근 데이터를 제거하며, 서브루틴 호출 관리, 수식 평가, 백트래킹 등에 활용된다.
  • 자료 구조 - 라우팅 테이블
    라우팅 테이블은 네트워크에서 데이터 전송 시 최적 경로를 결정하는 핵심 데이터베이스로, 라우터가 목적지 IP 주소를 기반으로 다음 홉을 결정하며 직접 연결 및 원격 네트워크 경로 정보를 저장하고 동적 라우팅 또는 수동 설정으로 관리된다.
  • 자료 구조 - 스택
    스택은 후입선출(LIFO) 원칙에 따라 데이터를 관리하는 추상 자료형으로, push 연산으로 데이터를 쌓고 pop 연산으로 가장 최근 데이터를 제거하며, 서브루틴 호출 관리, 수식 평가, 백트래킹 등에 활용된다.
우선순위 큐
자료 구조
유형추상 자료형
시간 복잡도 (일반적인 구현)삽입: O(log n)
삭제: O(log n)
최소/최대 요소 접근: O(1)
공간 복잡도O(n)
구현
일반적인 구현 방법
균형 이진 탐색 트리
배열
연결 리스트
변형이항 힙
피보나치 힙
쌍대 힙
소프트 힙
레디얼 힙
활용
주요 활용 분야다익스트라 알고리즘
허프만 부호화
A* 탐색 알고리즘
운영체제의 스케줄링
정의
설명우선순위 큐는 각 요소가 우선순위를 가지는 큐이다.
작동 방식우선순위가 높은 요소가 먼저 제공된다.
추상적 자료형우선순위 큐는 추상적 자료형으로, 구체적인 구현 방식은 여러 가지가 있을 수 있다.

2. 연산

우선순위 큐는 적어도 다음 연산을 지원해야 한다.


  • `is_empty`: 큐에 요소가 없는지 확인한다.
  • `insert_with_priority`: 관련된 우선순위와 함께 원소를 큐에 추가한다.
  • `pull_highest_priority_element`: 큐에서 ''최고 우선순위''를 가진 요소를 제거하고 반환한다. 이는 "''pop_element(Off)''", "''get_maximum_element''" 또는 "''get_front(most)_element''"라고도 한다. 일부에서는 우선순위 순서를 반대로 하여 낮은 값을 더 높은 우선순위로 간주하기도 하는데, 이때는 "''get_minimum_element''"라고도 하며 "''get-min''"으로 줄여 쓰기도 한다. "''peek_at_highest_priority_element''" 및 "''delete_element''" 함수를 별도로 지정하여 조합하면 "''pull_highest_priority_element''"를 만들 수도 있다.


큐를 수정하지 않고 최고 우선순위 요소를 반환하는 ''peek''(이 경우 ''find-max'' 또는 ''find-min''이라고도 함)는 매우 자주 구현되며, 거의 항상 ''O''(1) 시간에 실행된다. 이 연산과 그 ''O''(1) 성능은 우선순위 큐의 여러 응용 분야에서 매우 중요하다.

더욱 발전된 구현에서는 ''pull_lowest_priority_element'', 최고 또는 최저 우선순위의 처음 몇 개 요소 검사, 큐 지우기, 큐의 하위 집합 지우기, 일괄 삽입, 둘 이상의 큐 병합, 모든 요소의 우선순위 증가 등과 같은 더 복잡한 연산을 지원할 수 있다.

3. 구현

우선순위 큐는 연관 배열을 사용하여 구현할 수 있다. 가장 간단한 방법은 각 우선순위에 요소 목록을 연결하는 것이다. 연관 리스트나 해시 테이블을 사용하면 요소 추가는 빠르게(O(1)) 할 수 있지만, 요소를 삭제하거나 첫 번째 요소를 참조하려면 모든 키를 탐색해야 해서 느리다(O(''n'')). 균형 이진 탐색 트리를 사용하면 이 세 가지 연산을 모두 O(log ''n'')으로 수행할 수 있어 더 효율적이다.

반 엠데 보아스 트리는 이 세 가지 연산을 O(log log ''n'')으로 더 빠르게 수행할 수 있지만, 큐의 공간 비용이 커지는 단점이 있다.

을 사용하면 더 좋은 성능을 낼 수 있다. 이진 힙은 요소 삽입 및 삭제를 O(log ''n'')으로, 첫 번째 요소 참조는 O(1)로 수행한다. 이항 힙은 몇 가지 추가 연산을 제공하지만, 첫 번째 요소 참조에 O(log ''n'')이 걸린다. 피보나치 힙은 삽입, 첫 번째 요소 참조, 우선순위 낮추기 연산을 O(1)의 분할 상환 실행 시간으로, 요소 삭제는 O(log ''n'')으로 수행하여 효율성을 높인다.

3. 1. 단순 구현

정렬되지 않은 리스트를 사용하여 우선순위 큐를 구현할 수 있다. 이 경우, 삽입은 O(1) 시간에 가능하지만, 가장 우선순위가 높은 요소를 꺼내기 위해서는 모든 요소를 검색해야 하므로 O(''n'') 시간이 소요된다.

다른 방법으로는 우선순위로 정렬된 리스트를 사용하는 것이다. 이 경우, 삽입에는 O(''n'') 시간이 걸리지만, 가장 우선순위가 높은 요소를 꺼내는 데는 O(1) 시간이 소요된다.

3. 2. 일반적인 구현

일반적으로 우선순위 큐를 구현하기 위해 을 사용한다. 힙은 삽입 및 제거에 ''O''(log ''n'')의 성능을 제공하며, ''n''개의 요소 집합으로부터 초기 힙을 구성하는 데는 ''O''(''n'')의 성능을 제공한다. 페어링 힙 또는 피보나치 힙과 같은 기본 힙 자료 구조의 변형은 일부 연산에 대해 더 나은 성능을 제공할 수 있다.[1]

균형 이진 탐색 트리를 사용하는 경우에도 삽입 및 제거에 ''O''(log ''n'') 시간이 걸린다. 하지만, 기존 요소 시퀀스에서 트리를 구성하는 데는 ''O''(''n'' log ''n'') 시간이 걸린다. 이는 타사 또는 표준 라이브러리와 같이 이러한 자료 구조에 이미 접근할 수 있는 경우에 일반적이다. 공간 복잡성 관점에서 연결 리스트를 사용한 균형 이진 탐색 트리는 다른 노드에 대한 추가 참조를 저장해야 하므로 더 많은 저장 공간을 차지한다.

3. 3. 특수화된 힙

특정 유형의 키, 특히 정수 키에 대해 추가 연산을 제공하거나 힙 기반 구현보다 성능이 뛰어난 특수 자료 구조들이 있다.

  • 반 엠데 보아스 트리: ''최소값'', ''최대값'', ''삽입'', ''삭제'', ''검색'', ''최소값 추출'', ''최대값 추출'', ''이전 값'' 및 ''다음 값'' 연산을 ''O''(log log ''C'') 시간에 지원하지만, 우선순위 값의 비트 수인 ''m''에 대해 ''O''(2''m''/2)의 작은 큐의 공간 비용이 발생한다.[3] 해싱을 사용하면 공간을 크게 줄일 수 있다.
  • 마이클 프레드먼(Michael Fredman)과 댄 윌라드(Dan Willard)의 퓨전 트리는 ''최소값'' 연산을 ''O''(1) 시간에, ''삽입'' 및 ''최소값 추출'' 연산을 O(\log n / \log \log C) 시간에 구현한다. 그러나 저자는 "우리 알고리즘은 이론적인 관심만 있을 뿐이다. 실행 시간에 관련된 상수 요인으로 인해 실용적이지 않다."라고 언급했다.[4]


단조 우선순위 큐: 이전에 추출된 항목보다 낮은 우선순위(최소 힙의 경우)를 가진 항목이 삽입되지 않는 경우에 최적화된 특수 큐이다. 이 제한은 우선순위 큐의 여러 실제 응용 프로그램에서 충족된다.

3. 4. 다양한 자료 구조의 시간 복잡도 요약

다음은 다양한 힙 자료 구조의 시간 복잡도[5]이다. "''O''(''f'')" 및 "''Θ''(''f'')"의 의미는 빅 오 표기법을 참조하면 된다. 연산 이름은 최소 힙을 가정한다.

연산find-mindelete-mindecrease-key삽입meldmake-heap
이진[5]Θ(1)Θ(log n)Θ(log n)Θ(log n)Θ(n)Θ(n)
Skew[7]Θ(1)O(log n)O(log n)O(log n)O(log n)Θ(n)
Leftist[8]Θ(1)Θ(log n)Θ(log n)Θ(log n)Θ(log n)Θ(n)
이항[5][9]Θ(1)Θ(log n)Θ(log n)Θ(1)Θ(log n)Θ(n)
Skew 이항[10]Θ(1)Θ(log n)Θ(log n)Θ(1)Θ(log n)Θ(n)
2–3[12]Θ(1)O(log n)Θ(1)Θ(1)O(log n)Θ(n)
Bottom-up skew[7]Θ(1)O(log n)O(log n)Θ(1)Θ(1)Θ(n)
페어링[13]Θ(1)O(log n)o(log n)Θ(1)Θ(1)Θ(n)
랭크-페어링[16]Θ(1)O(log n)Θ(1)Θ(1)Θ(1)Θ(n)
피보나치[5][17]Θ(1)O(log n)Θ(1)Θ(1)Θ(1)Θ(n)
Strict 피보나치[18]Θ(1)Θ(log n)Θ(1)Θ(1)Θ(1)Θ(n)
Brodal[19]Θ(1)Θ(log n)Θ(1)Θ(1)Θ(1)Θ(n)[20]


4. 우선순위 큐와 정렬 알고리즘의 동등성

우선순위 큐의 의미는 정렬 방법을 자연스럽게 제시한다. 정렬할 모든 요소를 우선순위 큐에 삽입하고 순차적으로 제거하면 정렬된 순서로 나오게 된다. 이것은 실제로 우선순위 큐가 제공하는 추상화 계층을 제거하면 여러 정렬 알고리즘에서 사용되는 절차이다. 이 정렬 방법은 다음과 같은 정렬 알고리즘과 동일하다.

이름우선순위 큐 구현최선평균최악
힙 정렬n \log(n)n \log(n)n \log(n)
스무스 정렬레오나르도 힙nn \log(n)n \log (n)
선택 정렬정렬되지 않은 배열n^2n^2n^2
삽입 정렬정렬된 배열n n^2 n^2
트리 정렬균형 이진 탐색 트리n \log(n)n \log(n)n \log(n)



정렬 알고리즘은 우선순위 큐를 구현하는 데에도 사용할 수 있다. 구체적으로, 토럽은 다음과 같이 말한다.[21]

> 우리는 우선순위 큐를 정렬로 줄이는 일반적인 결정적 선형 공간 감소를 제시하며, 여기서 최대 ''n''개의 키를 키당 ''S''(''n'') 시간에 정렬할 수 있다면, ''delete''와 ''insert''를 ''O''(''S''(''n'')) 시간에 지원하고, ''find-min''을 상수 시간에 지원하는 우선순위 큐가 존재한다.

즉, 키당 ''O''(''S'') 시간에 정렬할 수 있는 정렬 알고리즘이 있다면, 여기서 ''S''는 ''n''과 단어 크기의 함수이며,[22] 주어진 절차를 사용하여 우선순위가 가장 높은 요소를 꺼내는 데 ''O''(1) 시간이 걸리고, 새 요소를 삽입(및 삭제)하는 데 ''O''(''S'') 시간이 걸리는 우선순위 큐를 만들 수 있다. 예를 들어, ''O''(''n'' log ''n'') 정렬 알고리즘이 있다면, ''O''(1) 꺼내기와 ''O''( log ''n'') 삽입을 가진 우선순위 큐를 만들 수 있다.

5. 라이브러리

우선순위 큐는 여러 프로그래밍 언어에서 표준 라이브러리나 외부 라이브러리를 통해 제공된다.


  • C++표준 템플릿 라이브러리(STL)는 `std::priority_queue`라는 컨테이너 어댑터 클래스 템플릿을 제공한다. 이는 최대 우선순위 큐를 구현하며, 반복자 접근은 허용하지 않는다. 부스트 라이브러리에도 힙 라이브러리에 구현이 있다. GCC (libstdc++-v3)에서는 이진 힙이 채택되었다.[30] g++ 확장인 PBDS에는 내부 데이터 구조를 선택할 수 있는 priority_queue가 존재하며, 기본값은 페어링 힙이다.[31]

  • Python의 `heapq` 모듈은 리스트를 기반으로 이진 최소 힙을 구현한다.

  • 자바 라이브러리에는 `PriorityQueue` 클래스가 있으며, 이진 힙으로 최소 우선순위 큐를 구현한다. Java 8 현재, 계산량은 다음과 같다.[32]


계산량
연산메서드명최악 계산량평균 계산량
선두 참조peekO(1)O(1)
요소 수 얻기sizeO(1)O(1)
추가addO(log n)O(1)
선두 삭제pollO(log n)O(log n)
선두 이외 삭제remove(Object)O(n)O(n)
우선순위 변경없음O(n)O(n)


  • .NET 라이브러리에는 `PriorityQueue` 클래스가 있으며, 배열 기반의 사원 최소 힙을 구현한다.

  • 스칼라 라이브러리에는 최대 우선순위 큐를 구현하는 `PriorityQueue` 클래스가 있다.

  • Go 라이브러리에는 `container/heap` 모듈이 있으며, 최소 힙을 구현한다.

  • 표준 PHP 라이브러리 확장은 `SplPriorityQueue` 클래스를 포함한다.

  • 애플(Apple Inc.)의 코어 파운데이션 프레임워크에는 최소 힙을 구현하는 `CFBinaryHeap` 구조체가 있다.

6. 응용

우선순위 큐는 컴퓨터 과학의 여러 분야에서 응용된다.


  • 그래프 알고리즘: 다익스트라 알고리즘, 프림 알고리즘 등 최단 경로나 최소 신장 트리를 찾는 알고리즘에 사용된다.
  • 데이터 압축: 허프만 부호화와 같이 데이터를 효율적으로 압축하는 데 활용된다.
  • 운영 체제: 프로세스 관리, 인터럽트 처리, 부하 분산 등 운영 체제의 핵심 기능에 사용된다.

6. 1. 대역폭 관리

컴퓨터 네트워크의 라우터에서 대역폭과 같은 제한된 자원을 관리하는 데 우선순위 큐가 사용될 수 있다. 대역폭 부족으로 인해 나가는 트래픽이 대기열에 들어가는 경우, 우선순위가 가장 높은 큐의 트래픽이 먼저 전송되고, 다른 모든 큐는 중단될 수 있다. 이를 통해 우선순위가 지정된 트래픽(예: VoIP 연결의 RTP 스트림과 같은 실시간 트래픽)은 최소한의 지연과 큐가 최대 용량에 도달하여 거부될 가능성을 최소화하여 전달된다. 다른 모든 트래픽은 가장 높은 우선순위 큐가 비어 있을 때 처리될 수 있다. 또는, 우선순위가 높은 큐에서 불균형적으로 더 많은 트래픽을 전송하는 방식도 사용된다.

근거리 통신망을 위한 많은 현대적 프로토콜은 미디어 접근 제어 (MAC) 하위 계층에서 우선순위 큐의 개념을 포함한다. 이는 최선형 서비스로 제공될 수 있는 다른 애플리케이션보다 우선순위가 높은 애플리케이션(예: VoIP 또는 IPTV)이 더 낮은 지연 시간을 경험하도록 한다. 예를 들어 IEEE 802.11의 수정안인 IEEE 802.11e(서비스 품질을 제공)와 기존 가정 배선(전력선, 전화선 및 동축 케이블)을 사용하는 고속 근거리 통신망 표준인 ITU-T G.hn이 있다.

일반적으로, 가장 높은 우선순위 큐의 트래픽이 사용할 수 있는 대역폭을 제한하기 위해 제한(폴리서)이 설정되어, 우선순위가 높은 패킷이 다른 모든 트래픽을 차단하는 것을 방지한다. 이러한 제한은 시스코(Cisco) Callmanager와 같은 상위 레벨 제어 인스턴스에 의해 거의 도달되지 않으며, 프로그래밍된 대역폭 제한을 초과하는 통화를 억제하도록 프로그래밍할 수 있다.[23]

6. 2. 이산 사건 시뮬레이션

이산 사건 시뮬레이션에서 우선순위 큐는 이벤트를 관리하는 데 사용된다. 이벤트는 시뮬레이션 시간을 우선순위로 사용하여 큐에 추가된다. 시뮬레이션은 큐의 맨 위에 있는 항목을 반복적으로 꺼내고 해당 이벤트를 실행하는 방식으로 진행된다.[1]

참고: 스케줄링 (컴퓨팅), 대기열 이론

6. 3. 그래프 알고리즘

다익스트라 알고리즘을 구현할 때 그래프가 인접 리스트 또는 행렬 형태로 저장될 경우, 우선순위 큐를 사용하여 최소값을 효율적으로 추출할 수 있다. 허프만 코딩은 가장 낮은 빈도를 가진 두 개의 트리를 반복적으로 얻어야 하는데, 우선순위 큐는 이를 수행하는 한 가지 방법이다.

최선 우선 탐색 알고리즘은 A* 검색 알고리즘과 같이 두 정점 또는 노드 사이의 최단 경로를 찾기 위해 가장 유망한 경로를 먼저 시도한다. 우선순위 큐는 탐색하지 않은 경로를 추적하는 데 사용되며, 총 경로 길이의 추정치가 가장 작은 경로에 가장 높은 우선순위가 부여된다. 메모리 제한으로 인해 최선 우선 탐색이 실용적이지 않은 경우, SMA* 알고리즘과 같은 변형 알고리즘을 대신 사용할 수 있으며, 양방향 우선순위 큐를 사용하여 낮은 우선순위 항목을 제거할 수 있다.

실시간 최적 적응형 메시 (ROAM) 알고리즘은 지형의 동적으로 변화하는 삼각 측량을 계산한다. 이 알고리즘은 더 많은 세부 정보가 필요한 곳에서는 삼각형을 분할하고, 덜 필요한 곳에서는 병합하여 작동한다. 각 삼각형에 우선 순위를 할당하며, 이는 일반적으로 해당 삼각형을 분할할 경우의 오류 감소와 관련이 있다. 분할할 수 있는 삼각형과 병합할 수 있는 삼각형을 위해 두 개의 우선 순위 큐를 사용한다. 각 단계에서 분할 큐에서 가장 높은 우선 순위를 가진 삼각형이 분할되거나, 병합 큐에서 가장 낮은 우선 순위를 가진 삼각형이 이웃과 병합된다.

최소 힙 우선순위 큐를 사용하여 Prim 알고리즘에서 연결된 및 무향 그래프의 최소 신장 트리를 찾으면 좋은 실행 시간을 얻을 수 있다. 이 최소 힙 우선순위 큐는 '삽입', '최소값', '추출-최소', '키 감소'와 같은 연산을 지원하는 최소 힙 데이터 구조를 사용한다.[23] 이 구현에서 간선의 가중치는 정점의 우선순위를 결정하는 데 사용된다. 가중치가 낮을수록 우선순위가 높고, 가중치가 높을수록 우선순위가 낮아진다.[24]

6. 4. 운영 체제

운영 체제에서 우선순위 큐는 프로세스 관리, 인터럽트 처리, 부하 분산 등에 활용된다.

7. 병렬 우선순위 큐

병렬 처리는 우선순위 큐의 속도를 높이는 데 사용될 수 있다. 이를 위해 우선순위 큐 인터페이스에 몇 가지 변경이 필요하다.
동시 병렬 접근 (Concurrent parallel access): 여러 프로세서가 동일한 우선순위 큐에 동시에 접근할 수 있도록 허용한다.


  • 문제점:
  • 여러 프로세스가 동시에 우선순위 큐에 접근하면, 연산의 의미가 모호해진다. 예를 들어, 두 프로세스가 동시에 가장 높은 우선순위의 요소를 추출하려고 할 때, 같은 요소를 얻어야 하는지, 아니면 다른 요소를 얻어야 하는지 명확하지 않다.
  • 여러 프로세스가 동일한 요소에 접근하므로 경합이 발생한다.
  • 노드 3이 삽입되어 노드 2의 포인터를 노드 3으로 설정합니다. 그 직후 노드 2가 삭제되고 노드 1의 포인터가 노드 4로 설정됩니다. 이제 노드 3은 더 이상 접근할 수 없습니다.

K-element 연산: 단일 요소가 아닌 k개의 요소에 대해 작동하는 일괄 연산을 허용한다. (예: `k_extract-min`은 가장 높은 우선순위를 가진 처음 k개의 요소를 제거한다.)

  • k_extract-min 연산:
  • 우선순위 큐에서 k개의 가장 작은 요소를 삭제하고 반환한다.
  • 공유 메모리 설정에서 병렬 이진 탐색 트리와 조인 기반 트리 알고리즘을 사용하여 쉽게 구현할 수 있다.
  • `k_extract-min`은 O(log n)의 비용이 들고 k개의 가장 작은 요소를 포함하는 트리를 생성하는 이진 탐색 트리에 대한 '분할'에 해당한다.

  • k_insert 연산:
  • 원래 우선순위 큐와 삽입 배치의 '결합'을 적용하여 적용할 수 있다.
  • 배치가 이미 키로 정렬된 경우 `k_insert`는 O(k log (1+n/k)) 비용이 든다.
  • 그렇지 않으면 먼저 배치를 정렬해야 하므로 비용은 O(k log n)이 된다.

  • 분산 메모리 환경:
  • 각 프로세서는 자체 로컬 메모리와 로컬 (순차적) 우선순위 큐를 가진다.
  • 전역 (병렬) 우선순위 큐의 요소는 모든 프로세서에 분산된다.
  • `k_insert` 연산은 요소를 균일하게 무작위로 프로세서에 할당하여 로컬 큐에 요소를 삽입한다.
  • `k_extract-min` 연산은 각 로컬 큐에서 가장 작은 m개의 요소를 제거하여 결과 집합에 수집하고, 병렬 선택을 통해 결과 집합에서 가장 작은 k개의 요소를 결정한다.
  • `k_extract-min`의 실행 시간은 O(k/p log(n))로 예상되며, 여기서 k = Ω(p * log(p))이고 n은 우선순위 큐의 크기이다.[29]
  • ''k_extract-min''이 3개의 프로세서가 있는 우선순위 큐에서 실행됩니다. 녹색 요소가 반환되어 우선순위 큐에서 제거됩니다.

k-요소 연산의 제약: 모든 알고리즘이 k-요소 연산을 사용할 수 있는 것은 아니다. 예를 들어, 다익스트라 알고리즘은 한 번에 여러 노드에서 작동할 수 없으므로 k-요소 연산을 사용하면 알고리즘의 레이블 설정 속성이 손상된다.

참조

[1] 서적 Introduction to Algorithms
[2] 서적 The Algorithm Design Manual Springer Science+Business Media
[3] 간행물 Preserving order in a forest in less than logarithmic time IEEE Computer Society
[4] 논문 Surpassing the information theoretic bound with fusion trees
[5] 서적 Introduction to Algorithms
[6] 논문 Average Case Analysis of Heap Building by Repeated Insertion http://www.stats.ox.[...] 2016-01-28
[7] 논문 Self-Adjusting Heaps https://www.cs.cmu.e[...] 1986-02
[8] 서적 Data Structures and Network Algorithms
[9] 웹사이트 Binomial Heap {{!}} Brilliant Math & Science Wiki https://brilliant.or[...] 2019-09-30
[10] 간행물 Optimal purely functional priority queues 1996-11
[11] 서적 Purely Functional Data Structures
[12] 간행물 Theory of 2–3 Heaps https://ir.canterbur[...]
[13] 간행물 Proc. 7th Scandinavian Workshop on Algorithm Theory http://john2.poly.ed[...] Springer-Verlag
[14] 논문 On the Efficiency of Pairing Heaps and Related Data Structures http://www.uqac.ca/a[...] 1999-07
[15] 학회 Towards a Final Analysis of Pairing Heaps http://web.eecs.umic[...]
[16] 논문 Rank-pairing heaps http://sidsen.org/pa[...] 2011-11
[17] 논문 Fibonacci heaps and their uses in improved network optimization algorithms http://bioinfo.ict.a[...] 1987-07
[18] 학회 Strict Fibonacci heaps http://www.cs.au.dk/[...]
[19] 간행물 Proc. 7th Annual ACM-SIAM Symposium on Discrete Algorithms
[20] 서적 Data Structures and Algorithms in Java
[21] 논문 Equivalence between priority queues and sorting
[22] 웹사이트 Archived copy http://courses.csail[...] 2011-02-10
[23] 서적 Introduction to Algorithms
[24] 웹사이트 Prim's Algorithm http://www.geeksforg[...] Geek for Geeks 2012-11-18
[25] 논문 Fast and lock-free concurrent priority queues for multi-thread systems https://doi.org/10.1[...] 2005
[26] 간행물 A Skiplist-Based Concurrent Priority Queue with Minimal Memory Contention http://www.it.uu.se/[...] 2013
[27] 간행물 Symposium on Parallel Algorithms and Architectures, Proc. of 28th ACM Symp. Parallel Algorithms and Architectures (SPAA 2016) ACM
[28] 간행물 Proceedings of the 23rd ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming ACM
[29] 서적 Sequential and Parallel Algorithms and Data Structures - The Basic Toolbox Springer International Publishing 2019
[30] 문서 libstdc++-v3: stl_queue.h https://github.com/g[...]
[31] 문서 Policy-Based Data Structures: Priority-Queues http://gcc.gnu.org/o[...]
[32] 문서 PriorityQueue (Java Platform SE 8) http://docs.oracle.c[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com