【发布时间】:2021-12-02 08:52:01
【问题描述】:
考虑以下操作
Build(A[1 ...它的运行时间为 O(n)。
Insert(x):将元素 x 插入到数据结构中。它以 O(log n) 的时间运行。
中位数:返回当前存储元素的中位数1。它在 O(1) 时间内运行。
我如何描述一个数据结构,即提供一个我将在这个数据结构中维护的不变量? 如何编写 Build()、Insert() 和 Median() 的伪代码?
更新
构建最大堆/最小堆:
void build_maxheap (int Arr[ ])
{
for(int i = N/2 ; i >= 1 ; i-- )
{
max_heapify (Arr, i) ;
}
}
void build_minheap (int Arr[ ])
{
for( int i = N/2 ; i >= 1 ; i--)
min_heapify (Arr, i);
}
这都将在 O(n) 中运行。
插入:
void insert (int Arr[ ], int val)
{
length = length + 1;
Arr[ length ] = -1;
increase_val (Arr, length, val);
}
这将在 O(log n) 中运行。
中位数呢?运行时间 O(1)
【问题讨论】:
-
请展示你自己对解决方案的尝试,而不是把你的作业丢在这里。更多详情请参考help center,但您所描述的是self balancing binary-search tree
-
请提供
Build()的详细信息。该建筑物是否包含 {5,5, 2,2, 9,9, 3,3, 5,5, 0,0, -1, -1} 之类的数据? -
@OneCricketeer 如何在 O(n) 中初始化它?
-
是的,我们假设所有元素都是从 1 到 10^6 的整数
-
@OneCricketeer 是的,刚刚意识到。不过,我仍然怀疑中位数总是在根部。
标签: algorithm data-structures median