d-max堆从顶部和底部插入项目

时间:2015-05-01 14:27:28

标签: c++ arrays

我想在c ++中实现一个insert函数来构建一个d-max堆。 d表示堆中的子节点数,而最大堆是一个具有其'的堆。优先构成的要素(3,2,1 ......)。堆应该表示为一个数组,而我正在寻找的函数是从顶部逐个添加项目然后继续向下。这似乎是一件容易的事,但我对这是如何工作感到困惑。

以下是模板功能的一个粗略示例:

template <typename Comparable>
void buildHeapTopDown(Comparable arr[], int size, int d)
{
    for (int i = 0; i < 5; ++i)
    {
        arr[0] = 2;
        arr[1] = 3;
        arr[2] = 4;
        arr[3] = 6;
        arr[4] = 9;
    }
}

现在因为这是一些非常基本的代码,所以函数并没有真正提供有关d-heap工作方式的信息。我的意思是我没有实现d-heap背后的理论,它基本上和二进制堆背后的理论基本相同(我们在公式中只用d代替2)。用于查找堆的父项和子项的公式将变为: (x-1) / dx*d + 1(左子)和x*d + 2(右子)。

我也知道有一种方法可以使用<algorithm>类创建堆,但由于这些函数已经准备好并且它们正在使用向量,所以它并不是我真正想要的对于。

使用算法类的示例:

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int myInts[] = { 1, 2, 3, 5, 4, 7, 10, 13, 15, 6, 8, 17, 9, 11, 9 };
    vector <int> v(myInts, myInts + 15);

    make_heap(v.begin(), v.end());
    cout << "Initial max heap: " << v.front() << endl;

    pop_heap(v.begin(), v.end());
    v.pop_back();
    cout << "Max heap after pop: " << v.front() << endl;

    v.push_back(77); // insert example 
    push_heap(v.begin(), v.end());
    cout << "Max heap after push: " << v.front() << endl;

    sort_heap(v.begin(), v.end());

    cout << "Final sorted range:";

    for (unsigned i = 0; i < v.size(); i++)
    {
        cout << " " << v[i];
    }

    cout << endl;

    getchar();
    getchar();

}

任何人都可以按照我在顶部描述的方式提供任何提示吗?

0 个答案:

没有答案