【发布时间】:2021-03-10 05:29:39
【问题描述】:
我有一个包含 n 个数字的序列,我想创建一个数据结构来回答以下问题:
序列n = [5 ,7, 4, 24, 8, 3, 12, 34]
我想要min(2,5),那么答案是3,因为a2=7, a3=4, a4=24, a5=8。所以 min(i,j) 返回 (i,j) 之间最小数的位置。
我认为保存这个序列的一个好的数据结构是一个完整的二叉树来保存叶子的序列号。但是我怎样才能在 O(n) 中实现这个结构呢?
【问题讨论】:
-
我希望在 O(n) 中创建数据结构,所有序列数都在叶子处,并且我希望在 O(登录)
-
您正在寻找的似乎是范围最小查询。在那里,您确实可以在线性时间内构建结构,然后获得恒定时间的最小索引答案。不过,这并不是微不足道的,并且涉及到 Cartatian 树。见en.m.wikipedia.org/wiki/Range_minimum_query
-
在 O(n) 中实现数据结构有什么问题?请澄清。
标签: algorithm data-structures tree binary-tree