在O(logn)时间内,给定额外条件的数据结构将找到最大对象?

时间:2018-02-25 01:17:21

标签: algorithm data-structures

我正在使用具有两个值的对象:价格和评级。将这些对象放入我选择的数据结构中,我想找到价格低于给定价格的最高评级对象 p ,在最坏情况下运行时间为O(log 名词的)。为简单起见,假设所有价格和评级都是唯一的(没有两个对象具有相同的价格或评级)。

我的第一直觉是使用按评级排序的最大堆,但这并不能保证我们能够在O(log n 中找到给定价格下的项目) 时间。二进制搜索树似乎也没有帮助,因为我们可以在O(log n )时间内找到最大评级,但同样不能保证我们能够在价格<下找到任何东西< EM> p 的。我觉得分裂和征服的方法在这里最好,但不知道如何存储所有的对象。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用增加的数据结构,二进制堆或二进制树,按价格排序,并附加一些信息,存储指向该价格下评级最高的项目的链接。您可以按如下方式构建此数据结构:

  • 首先按价格构建排序结构,
  • 将结构从最低价格走到最高,跟踪到目前为止发现的评分最高的商品
  • 在您走过结构时,将链接存储到每个节点中评分最高的项目。

现在,您可以通过查找价格的上限节点并返回其相关项目,来回答针对给定价格或低于给定价格的最高评级项目的查询。

答案 1 :(得分:2)

(我想这可能是user2357112在评论中建议的内容。)我们可以使用数组。按价格排序。到目前为止,存储具有最高评级的元素的指数,从低价到高价。二元价格搜索。

                  [(p 1, r 4), (p 2, r 10), (p 3, r 11), (p 4, r 9), (p 5, r 1)]
highest rating ->  N/A          0            1            2           2       
under p