在Queap数据结构上插入操作

时间:2016-06-05 15:37:41

标签: java c++ algorithm tree priority-queue

我正在尝试创建维基百科link中描述的Queap数据结构 由于缺乏信息,我陷入Insert操作的实现。那里描述的操作Insert似乎设置了element的一些数据,这些数据将被插入

 public static void Insert(Queap Q, Element x) {
            if (Q.n == 0)
                    Q.minL = x;
            Q.l.add(x);
            x.inList = true;
            if (x.compareTo(Q.minL) < 0)
                    Q.minL = x;
    }

该操作似乎具有复杂性O(1),如下所述:操作的成本为O(1)。列表L的大小增加1,潜在增加一些常数c。。但如果元素是int值,我该如何设置它?

1 个答案:

答案 0 :(得分:1)

根据article

  

要将元素x添加到列表l,将元素x添加到列表的末尾,并将元素x中的位变量设置为1。完成此操作以确定元素是在列表中还是在2-4树中。

你问:

  

但是如果元素是int值,我该怎么设置呢?

queap中的元素不直接对应于存储的数据类型的实例(在您的情况下,为int)。

相反,元素对应于以下组合:

  • 正在存储的数据类型的实例,
  • 一个布尔标志,指示该元素是在列表中还是在2-4树中。

这可以使用struct

来表示
template <typename T>
struct Element {
  T value;
  bool in_list;
};

或使用pair

template <typename T>
using Element = std::pair<T, bool>;