Ran*_*eer 6 algorithm time-complexity data-structures
我最近被要求构建一个支持四种操作的数据结构,即
元素是整数.
这是我建议的解决方案:
O(1)操作.pop,只需从堆栈中弹出一个元素.同样,这个操作是O(1).Find_max,返回堆栈中最顶层元素的max_so_far的值.再次,O(1).我被要求改进它,但我不能.
在时间复杂度方面,如果所有操作都发生,总体时间可以改善O(logn),我想.怎么做,是我无法得到的.
获得O(log n)-time操作的一种方法是混合两个数据结构,在这种情况下是双向链表和优先级队列(配对堆是一个不错的选择).我们有一个类似的节点结构
struct Node {
Node *previous, *next; // doubly linked list
Node **back, *child, *sibling; // pairing heap
int value;
} list_head, *heap_root;
Run Code Online (Sandbox Code Playgroud)
现在,为了推动,我们推进两种结构.对于find_max,我们返回配对堆的根值.对于pop或pop_max,我们从适当的数据结构中弹出,然后使用其他节点指针在其他数据结构中删除.