编写新的数据结构

时间:2010-12-15 13:17:04

标签: data-structures complexity-theory

我的作业中有一些关于数据结构的问题:

我有两个字段

的元素
class Element{
int point;       // point on the ax
int height;
};

我需要使用以下界面编写数据结构:

**Init(N)** - any complexity You want, initialization of N elements
**Update(x,y)** - if element on the point x exists, change its height to the y, complexity O(logn)
**Highest(x)** - find the highest element on the left from the element x and on the right of the element, `complexity I need is also O(logn)`

complexity for the memory is O(n)

有人可以帮忙,我如何用Highest创建函数current complexity?提前感谢您的帮助。

P.S I can use hash tables and also AVL trees

编辑

谢谢你们所有人,我不能得到一件小事,如何存储数据:

            10,1
     |               |
     5,14           17,23
|         |      |        |
2,5       7,25  5,10    20,100

    this is my tree all keys are the points on the ax X, number after comma is the height;
    if I want for example to find the highest on the right from NODE (2,5), I need to pass 
all nodes till the (20,100), cause this one is highest, am I wrong?

2 个答案:

答案 0 :(得分:1)

您可以使用AVL树查找元素x并在其左子树和右子树中找到最大值。所以只需向右走,直到你不能,这将是子树中最大的元素。对左右分支执行此操作,它应该在O(logn)

中运行

EDITED: 因此,在回答您编辑过的问题时,关于如何解释问题,一般来说只找到树中最大的元素会不会更有意义?如果您调用方法的节点x不是最高的,那么右边的最高位将只是树中最大的元素。找到最大值需要O(log n)时间。

答案 1 :(得分:0)

带有log(n)的Higest(x)给出了关于AVL树的答案