Fibonacci Heap - javatpoint
Fibonacci Heap - javatpoint
Advertisement
DS Tutorial
DS Tutorial
DS Introduction
DS Algorithm
Asymptotic Analysis
DS Pointer
DS Structure
DS Array
DS Array
2D Array
DS Linked List
Linked List
Skip list in DS
https://www.tpointtech.com/fibonacci-heap 1/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
DS Stack
Advertisement
DS Stack
Array Implementation
Javatpoint.com is now
TpointTech.com
Javatpoint.com is now changed to TpointTech.com, so we
request you to subscribe our newsletter for further updates.
← prev next →
Fibonacci Heap
In this article, we will learn about the Fibonacci heap, its properties, advantages and,
later on, its implementation: Before discussing the Fibonacci heap, let us first take a
quick overview of ideas used in building a Fibonacci heap:
Heaps are the abstract data type which is used to show the relationship between parents
and children: Heap is categorized into Min-Heap and Max-Heap:
1. A min-heap is a tree in which, for all the nodes, the key value of the parent must be
smaller than the key value of the children.
2. A max-heap is a tree in which, for all the nodes, the key value of the parent must be
greater than the key value of the children.
https://www.tpointtech.com/fibonacci-heap 2/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
A doubly-linked list is the advanced version of the singly-linked list. Each node in a
double-linked list contains two pointers left and right pointers. The left-pointer points to
its left node, and the right-pointer points to the right node. The right pointer of the last
node points to the first node, and the left pointer of the first node points to the last node.
The figure shows how a circular doubly-linked list is observed:
Fibonacci Heap - A Fibonacci heap is defined as the collection of rooted-tree in which all
the trees must hold the property of Min-heap. That is, for all the nodes, the key value of
the parent node should be greater than the key value of the parent node:
The above Fibonacci Heap consists of five rooted min-heap-ordered trees with 14 nodes.
The min-heap-ordered tree means the tree which holds the property of a min-heap. The
dashed line shows the root list. The minimum node in the Fibonacci heap is the node
containing the key = 3 pointed by the pointer FH-min.
https://www.tpointtech.com/fibonacci-heap 3/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Here, 18, 39, 26, and 35 are marked nodes, meaning they have lost one child. The
potential of theAdvertisement
Fibonacci series = No. of rooted tree + Twice the number of marked
nodes = 5 + 2 * 4 = 13.
Let us now observe the above example with the complete representation of the
Fibonacci Heap:
In the above figure, we can observe that each node contains four pointers, the parent
points to the parent (Upward), the child points to the child (downward), and the left and
right pointers for the siblings (sideways).
1. It can have multiple trees of equal degrees, and each tree doesn't need to have 2^k nodes.
2. All the trees in the Fibonacci Heap are rooted but not ordered.
3. All the roots and siblings are stored in a separated circular-doubly-linked list.
4. The degree of a node is the number of its children. Node X -> degree = Number of X's
children.
5. Each node has a mark-attribute in which it is marked TRUE or FALSE. The FALSE indicates
the node has not any of its children. The TRUE represents that the node has lost one child.
The newly created node is marked FALSE.
6. The potential function of the Fibonacci heap is F(FH) = t[FH] + 2 * m[FH]
7. The Fibonacci Heap (FH) has some important technicalities listed below:
1. min[FH] - Pointer points to the minimum node in the Fibonacci Heap
2. n[FH] - Determines the number of nodes
3. t[FH] - Determines the number of rooted trees
4. m[FH] - Determines the number of marked nodes
5. F(FH) - Potential Function.
The time complexities of different operations performed on a Fibonacci heap are listed
below in the table:
https://www.tpointtech.com/fibonacci-heap 4/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
It is created by the MAKE-FIB-HEAP, which allocates and returns the Fibonacci heap
object, FH in amortized cost O(1) equal to its actual cost:
https://www.tpointtech.com/fibonacci-heap 5/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Home Python Java JavaScript HTML SQL PHP
Advertisement
Insertion of a node:
The below pseudo code of INSERT-FIB-HEAP inserts a node x in the Fibonacci heap, FH.
Assume that the node x has already been allocated and x -> key is already filled:
INSERT-FIB-HEAP (FH, x)
1. x -> degree = 0
2. x -> parent = NIL
3. x -> child = NIL
4. x -> mark = FALSE
5. If FH -> min == NIL
6. create a root list for FH containing only x
7. FH -> min = x
8. Else
9. Insert x into FH's root list
10. If x -> key < FH -> min -> key
11. FH -> min = x
12. FH -> n = FH -> n + 1
The extraction of minimum Node is one of the most complicated operations performed
on the Fibonacci Heap. It is also where the delayed work of consolidating trees in the
root list finally occurs. The below pseudo-code extracts the minimum node of the
Fibonacci tree. For ease of use, the code assumes that when a node is removed from a
linked list, pointers in the list are updated but not pointers in the extracted node.
Additionally, it invokes the auxiliary procedure CONSOLIDATE, which we'll see in a
moment.
EXTRACT-MIN-FIB-HEAP (FH)
1. Y = FH -> Min
2. If Y != NIL
3. For each child x of Y
https://www.tpointtech.com/fibonacci-heap 7/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
CONSOLIDATE (FH)
1. Let A[0 ... D(FH -> N)] be a new array
2. For I = 0 to D (FH -> N)
3. A[i] = Nil
4. For each node w in the root list of H
5. X = W
6. d = X -> Degree
7. While A[d] != NIL
8. Y = A[d] // Another node with the same degree as X
9. If X -> Key > Y -> key
10. exchange X with Y
https://www.tpointtech.com/fibonacci-heap 8/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
3. - In lines 4 to 15, it executes the same process for all the nodes present in the root list.
It selects each node 'W' from the root list and stores it in 'X'. Then, it stores the degree of
X in d and runs a while loop if, at index d, it is not NIL. But initially, all the values are NIL,
so, it won't execute, and in line 14, it stores 'X' at index d. Now, the idea of while is to
check whether there is any node present in the root list of the same degree as of 'X'.
In the second iteration of the for-loop, it selects another node from the root list and
stores it in X and its degree in d. The while condition becomes true if there is a node in
the root list of the same degree as of 'X'. Suppose the condition of the while-loop is true.
Now, it stores the node of the same degree as of 'X' in Y and checks which has the larger
key. If Y has a key larger than the key of X., it swaps both of them and calls LINK-FIB-
HEAP (FH, Y, X) to delete the Y from the root list after making it a child of X, and it also
increases the degree of X by one after that.
In line 12, it removes the element stored at index d in the array and increases the value of
d by 1.
The whole idea of the code is to have exactly one node of each degree in the root list and
make other nodes a child of them without violating the condition of the Fibonacci heap.
https://www.tpointtech.com/fibonacci-heap 9/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
4. In lines 16 to 24, It runs a for loop for all the nodes stored in the array. Firstly, it checks
whether there Advertisement
is an element present in the array at index I or not. If yes, then it executes
the other peace of codes. Now, it checks whether the min of FH is NIL or not. If yes, then
it creates a root list and stores the A[I] into it and makes the FH -> min points to it. If not,
then it inserts the A[I] into the root list and compares its key value with the min -> key.
Whosoever has the smallest key, FH -> min will point to the smallest of them.
LINK-FIB-HEAP (FH, Y, X)
1. Remove Y from the root list of FH
2. Make Y a child of X and Increment X -> Degree
3. Y -> Mark = FALSE
4. Decreasing a Key
Decreasing a key is performed on the Fibonacci heap to decrease the key of any node
and can be performed in the O(1) amortized time. In the below pseudo code, we have
assumed that removing a from the linked list does not change any of the structural
attributes in the removed node.
DECREASE-Key-FIB-HEAP (FH, X, K)
1. If K > X -> Key
2. Error "New key is greater than the current key".
3. X -> KKey = K
https://www.tpointtech.com/fibonacci-heap 10/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
1. In lines 1 to 2, it checks whether the key entered is greater than the existing key or not.
If yes, the program terminates and will not change anything in the Fibonacci heap.
4. In line 5, The if condition will become true only if the node X does not belong to the
root list, i.e., there exists a parent of it, and the key of X must be smaller than the key of Y.
5. In line 6, it calls CUT (FH, X, Y) to remove X from the F and add it to the root list
7. In line 8, It checks whether the X has the key smaller than the FIB -> min -> Key or not
8. In line 9, if the condition is satisfied then it makes X the min of the Fibonacci heap.
CUT (FH, X, Y)
1. Remove X from the child of Y, Decrementing Y -> Degree
2. Add X to the root list of FH
3. X -> P = NIL
X -> Mark = FALSE
CASCADING-CUT (FH, Y)
1. Z = Y -> P
2. If Z != NIL
3. If Y -> Mark == FALSE
4. Y -> Mark = TRUE
5. Else
6. CUT (FH, Y, Z)
https://www.tpointtech.com/fibonacci-heap 11/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
In the above pseudo-code, it first finds the parent of Y and stores it in Z. Then, it checks
whether the Y is in the root list or not. If not means Z is not equal to NIL, Again, it checks
whether it is marked or not, If it is marked FALSE then it changes it to TRUE and the
control returns to the FIB-DECREASE-KEY. If it is marked TRUE, then it removes Y from Z
and places Y in the root list and repeats the same process and stops when one of the
parent nodes is found unmarked.
5. Deleting a Node:
The deleting a node from an n-node Fibonacci heap can be performed in O(D(n))
amortized cost time. In the below pseudo-code, we have assumed that as of now there is
no key value of -infinity in the heap.
DELETE-FIB-HEAP (H, X)
1. DECREASE-KEY-FIB-HEAP (FH, X, -∞)
2. EXTRACT-MIN-FIB-HEAP (FH)
The DECREASE-KEY-FIB-HEAP (FH, X, -∞) decreases the key of X and makes it the
smallest possible value i.e., -infinity. The EXTRACT-MIN-HEAP function removes X from
the Fibonacci heap. It can be concluded that the amortized cost of the DELETE-FIB-
HEAP is the sum of the amortized cost of DECREASE-KEY-FIB-HEAP (O(1)) and the
amortized cost of the EXTRACT-MIN-HEAP (O(D(n)).
← prev next →
https://www.tpointtech.com/fibonacci-heap 12/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
Related Posts
https://www.tpointtech.com/fibonacci-heap 13/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Blending vsAdvertisement
Stacking
Introduction Stacking and Blending are two powerful and popular ensemble methods
in machine learning. They are very similar, with the difference around how to allocate
the training data. They are most noticeable for their popularity and performance in
winning Kaggle competitions. Stacking Stacking or stacked generalisation was
introduced by...
4 min read
4 min read
https://www.tpointtech.com/fibonacci-heap 14/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Introduction Binary numbers are an essential subject in computer science and data
representationAdvertisement
fields. Computers, which are sophisticated devices made to work with
data, depend on the binary number system, which only employs the digits 0 and 1.
However, decimal numerals, which have ten digits ranging from...
4 min read
4 min read
7 min read
Recaman's Sequence
, named after the Colombian mathematician Bernardo Recaman Santos, is a fascinating
integer sequence that has captured the imagination of mathematicians and computer
scientists alike. It's defined by a simple yet intriguing rule, making it an excellent Java
exploration topic. Understanding Recamán's Sequence starts with the first...
6 min read
https://www.tpointtech.com/fibonacci-heap 15/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Python Java
Javascript HTML
Database PHP
C++ React
B.Tech / MCA
Data
DBMS
Structures
https://www.tpointtech.com/fibonacci-heap 16/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
Operating
DAA
System
Computer Compiler
Network Design
Computer Discrete
Organization Mathematics
Ethical Computer
Hacking Graphics
Web Software
Technology Engineering
https://www.tpointtech.com/fibonacci-heap 17/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Cyber Automata
Security
Advertisement
C
C++
Programming
Java .Net
Python Programs
Control Data
System Warehouse
Preparation
Aptitude Reasoning
https://www.tpointtech.com/fibonacci-heap 18/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
Verbal Interview
Ability Questions
Company
Questions
Advertisement
https://www.tpointtech.com/fibonacci-heap 19/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 20/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 21/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 22/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 23/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 24/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 25/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 26/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
Advertisement
Advertisement
https://www.tpointtech.com/fibonacci-heap 27/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 28/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 29/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 30/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 31/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 32/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 33/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 34/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 35/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 36/37
2/14/25, 11:38 AM Fibonacci Heap - javatpoint
Advertisement
https://www.tpointtech.com/fibonacci-heap 37/37