def _FibHeap__remove_node_test_2():
	heap = FibHeap()
	mylist = [5, 3, 1, 7]
	for i in mylist: heap.insert(i)
	for j in range(len(mylist)):
		heap._FibHeap__remove_node(heap.head)
		heap.print_heap()
def _FibHeap__remove_node_test_4():
	heap = FibHeap()
	mylist = [5, 3, 1, 7]
	for i in mylist: heap.insert(i)
	for j in range(len(mylist)):
		heap._FibHeap__remove_node(heap.head.left)
		print(f"After {j+1}th removal:")
		heap.print_heap()
Exemplo n.º 3
0
def mst_prim(G, r):
    FibHeapob = FibHeap(comparetor)
    SetDirQuery = {}
    for v in G.vertexs:
        if v == r:
            fheapNodeob = FibHeapNode(key=[v, 0, None])
        else:
            fheapNodeob = FibHeapNode(key=[v, float('inf'), None])
        SetDirQuery[v] = FibHeapob.Insert(fheapNodeob)
    MinNode = FibHeapob.ExtractMin()
    while MinNode != None:
        u = MinNode.key.key[0]
        print MinNode.key.key
        del SetDirQuery[u]
        for v in G.edges[u]:
            weight = v[1]
            vertex = v[0]
            if SetDirQuery.has_key(vertex) and weight < FibHeapob.getNodeKey(
                    SetDirQuery[vertex])[1]:
                FibHeapob.DrcreaseKey(SetDirQuery[vertex], [vertex, weight, u])
        MinNode = FibHeapob.ExtractMin()
def merge_test_2():
	heap = FibHeap()
	for i in [8, 9, 4, 2, 1]:
		heap.insert(i)

	heap2 = FibHeap()
	for i in [4, 3, 0, 7]:
		heap2.insert(i)

	heap2.merge(heap)
	print("min = ", heap.min_node)
	heap.print_heap()
	print("min = ", heap2.min_node)
	heap2.print_heap()
def insert_test_1():
	heap = FibHeap()
	for i in [8, 9, 4, 2, 1]:
		heap.insert(i)
		print(f"Minimum = {heap.min_node}")
		heap.print_heap()
	def revert_to_initial():
		nonlocal mylist, heap
		mylist = [5, 3, 1, 7]
		heap = FibHeap()
		for i in mylist: heap.insert(i)
def _FibHeap__remove_node_test_5():
	heap = FibHeap()
	mylist = None
	def revert_to_initial():
		nonlocal mylist, heap
		mylist = [5, 3, 1, 7]
		heap = FibHeap()
		for i in mylist: heap.insert(i)

	revert_to_initial()
	heap._FibHeap__remove_node(heap.head.right.right)
	print("New case: ")
	heap.print_heap()

	revert_to_initial()
	heap._FibHeap__remove_node(heap.head)#.right.left)
	print("New case: ")
	heap.print_heap()
	
	revert_to_initial()
	heap._FibHeap__remove_node(heap.head.left.left)
	print("New case: ")
	heap.print_heap()

	revert_to_initial()
	heap._FibHeap__remove_node(heap.head)
	heap._FibHeap__remove_node(heap.head.right)
	heap._FibHeap__remove_node(heap.head.left)
	print("New case: ")
	heap.print_heap()
def _FibHeap__remove_node_test_1():
	heap = FibHeap()
	for i in [1]:
		heap.insert(i)
	heap._FibHeap__remove_node(heap.head)
	print(heap.head, heap.min_node)
	assert heap.head is None

	heap = FibHeap()
	for i in [1, 2]:
		heap.insert(i)
	heap._FibHeap__remove_node(heap.head.right)
	print(heap.head, heap.min_node, heap.head.right, heap.head.left)

	heap = FibHeap()
	for i in [1, 2]:
		heap.insert(i)
	heap._FibHeap__remove_node(heap.head.left)
	print(heap.head, heap.min_node, heap.head.right, heap.head.left)

	heap = FibHeap()
	for i in [1, 2]:
		heap.insert(i)
	heap._FibHeap__remove_node(heap.head)
	print(heap.head, heap.min_node, heap.head.right, heap.head.left)
def extract_min_test(mylist):
	heap = FibHeap()
	
	for i in mylist:
		heap.insert(i)
	print("After all insertions:")
	heap.print_heap()#

	for x in range(len(mylist)):
		print(f"After {x + 1}th extraction:")
		heap.extract_min()
		heap.print_heap()

	try: heap.extract_min()
	except IndexError as err:
		if str(err) == "Popping from an empty heap.":
			pass
		else: raise IndexError(err)