📜  斐波那契堆——插入和联合

📅  最后修改于: 2021-10-28 02:13:50             🧑  作者: Mango

先决条件:斐波那契堆(介绍)

Fibonacci Heap 是具有最小堆或最大堆属性的树的集合。在斐波那契堆中,树可以具有任何形状,甚至所有树都可以是单个节点(这与二项式堆不同,其中每棵树都必须是二项式树)。
在本文中,我们将讨论斐波那契堆上的插入和联合操作。

插入:要在斐波那契堆 H 中插入节点,遵循以下算法:

例子:

联合:两个斐波那契堆 H1 和 H2 的联合可以如下完成:

例子:

以下是演示在斐波那契堆中构建和插入的程序:

C++
// C++ program to demonstrate building
// and inserting in a Fibonacci heap
#include 
#include 
#include 
using namespace std;
 
struct node {
    node* parent;
    node* child;
    node* left;
    node* right;
    int key;
};
 
// Creating min pointer as "mini"
struct node* mini = NULL;
 
// Declare an integer for number of nodes in the heap
int no_of_nodes = 0;
 
// Function to insert a node in heap
void insertion(int val)
{
    struct node* new_node = (struct node*)malloc(sizeof(struct node));
    new_node->key = val;
    new_node->parent = NULL;
    new_node->child = NULL;
    new_node->left = new_node;
    new_node->right = new_node;
    if (mini != NULL) {
        (mini->left)->right = new_node;
        new_node->right = mini;
        new_node->left = mini->left;
        mini->left = new_node;
        if (new_node->key < mini->key)
            mini = new_node;
    }
    else {
        mini = new_node;
    }
}
 
// Function to display the heap
void display(struct node* mini)
{
    node* ptr = mini;
    if (ptr == NULL)
        cout << "The Heap is Empty" << endl;
 
    else {
        cout << "The root nodes of Heap are: " << endl;
        do {
            cout << ptr->key;
            ptr = ptr->right;
            if (ptr != mini) {
                cout << "-->";
            }
        } while (ptr != mini && ptr->right != NULL);
        cout << endl
             << "The heap has " << no_of_nodes << " nodes" << endl;
    }
}
// Function to find min node in the heap
void find_min(struct node* mini)
{
    cout << "min of heap is: " << mini->key << endl;
}
 
 
// Driver code
int main()
{
 
    no_of_nodes = 7;
    insertion(4);
    insertion(3);
    insertion(7);
    insertion(5);
    insertion(2);
    insertion(1);
    insertion(10);
 
    display(mini);
 
    find_min(mini);
 
    return 0;
}


输出:
The root nodes of Heap are: 
1-->2-->3-->4-->7-->5-->10
The heap has 7 nodes
Min of heap is: 1

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。