Instructor: Jelani Nelson |
피보나씨 힙 은 러닝 타임 분석에 피보나씨 수가 쓰였기 때문에 이런 이름이 붙었습니다. priority queue 연산을 위한 힙 정렬한 트리의 자료 구조이며 (이진 트리로 만든) 이진 힙, (이항 트리를 결합한) 이항 힙 처럼 priority 큐 자료구조에 비해 훨씬 나은 성능을 보입니다. 피보나씨 힙 자료구조는 병합이 가능한 힙에 대해서 연산을 지원하며 자원 사용량을 분석하는 응용 프로그램에 적합한 (분할감소) 타임을 갖는 특징이 있습니다. 피보나씨 힙에서, 최소값 탐색 연산의 분할-타임은 O(1) 입니다. 삽입 연산, 키 감소 연산에서 힙의 크기가 n 인 구성요소를 삭제 (최소 구성요소를 삭제하는 특수한 경우) 할 때의 분할 타임은 O(log n) 입니다. 최대 힙 크기가 n 일때, 총 a개의 삽입, 키 감소, b개의 삭제 연산의 수행시간은 O(a + b log n) 입니다. 이진 힙, 이항 힙의 경우에는 O((a + b) log n) 입니다. 이때 b < a 인 경우에 피보나씨 힙이 이진 힙, 이항 힙 보다 더 효율적 입니다. 그러면 이제 힙을 병합하는 경우를 생각해 봅시다. 이항 힙을 병합하는 경우 수행시간은 O(log n) 입니다. 이진 힙의 경우 병합은 비효율적 이며, 피보나씨 힙의 경우에는 병합 할 때 효율적입니다. 피보나씨 힙을 쓰면 다른 priority 큐 알고리즘에 비해서 그래프 노드 사이의 거리를 계산할 때 러닝 타임의 효율을 높여줍니다.