Skip to content

Adding the file of Fibonacci_Heap in DSA Section #9252

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions data_structures/heap/fibonacci_heap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
class FibonacciNode:
def __init__(self, key):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: key

self.key = key
self.children = []
self.marked = False
self.degree = 0
self.parent = None

class FibonacciHeap:
def __init__(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: __init__. If the function does not return a value, please provide the type hint as: def function() -> None:

self.trees = []
self.least = None
self.count = 0

def insert(self, key):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: insert. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function insert

Please provide type hint for the parameter: key

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: insert. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function insert

Please provide type hint for the parameter: key

new_node = FibonacciNode(key)
self.trees.append(new_node)
self.count += 1

if self.least is None or key < self.least.key:
self.least = new_node

def extract_min(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: extract_min. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function extract_min

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: extract_min. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function extract_min

if self.count == 0:
raise ValueError("Heap is empty")

min_node = self.least
self.trees.remove(min_node)

for child in min_node.children:
child.parent = None
self.trees.append(child)

self.count -= 1

if self.least is min_node:
self.least = None
for node in self.trees:
if self.least is None or node.key < self.least.key:
self.least = node

self.consolidate()

return min_node.key

def consolidate(self):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: consolidate. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function consolidate

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: consolidate. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function consolidate

degree_counts = [0] * len(self.trees)

for node in self.trees:
degree_counts[node.degree] += 1

new_trees = []
for i in range(len(degree_counts)):
while degree_counts[i] > 1:
degree_counts[i] -= 1

node1 = self.trees.pop()
node2 = self.trees.pop()

if node1.key < node2.key:
new_node = node1
new_node.children.append(node2)
else:
new_node = node2
new_node.children.append(node1)

new_node.degree += 1
new_trees.append(new_node)

self.trees = new_trees

def decrease_key(self, node, new_key):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: decrease_key. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function decrease_key

Please provide type hint for the parameter: node

Please provide type hint for the parameter: new_key

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: decrease_key. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function decrease_key

Please provide type hint for the parameter: node

Please provide type hint for the parameter: new_key

if new_key > node.key:
raise ValueError("New key must be less than or equal to old key")

node.key = new_key

if node == self.least:
self.least = node

while node.parent is not None and node.key < node.parent.key:
self.cut(node)
self.cascading_cut(node.parent)

def cut(self, node):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: cut. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function cut

Please provide type hint for the parameter: node

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: cut. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function cut

Please provide type hint for the parameter: node

node.parent.children.remove(node)
node.parent = None
self.trees.append(node)

node.degree = 0
node.marked = False

def cascading_cut(self, node):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: cascading_cut. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function cascading_cut

Please provide type hint for the parameter: node

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: cascading_cut. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file data_structures/heap/fibonacci_heap.py, please provide doctest for the function cascading_cut

Please provide type hint for the parameter: node

if node.marked:
self.cut(node)

if node.parent is not None:
node.parent.marked = True