我正在使用具有两个值的对象:价格和评级。将这些对象放入我选择的数据结构中,我想找到价格低于给定价格的最高评级对象 p ,在最坏情况下运行时间为O(log 名词的)。为简单起见,假设所有价格和评级都是唯一的(没有两个对象具有相同的价格或评级)。
我的第一直觉是使用按评级排序的最大堆,但这并不能保证我们能够在O(log n 中找到给定价格下的项目) 时间。二进制搜索树似乎也没有帮助,因为我们可以在O(log n )时间内找到最大评级,但同样不能保证我们能够在价格<下找到任何东西< EM> p 的。我觉得分裂和征服的方法在这里最好,但不知道如何存储所有的对象。有什么想法吗?
答案 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