实施数据结构

时间:2017-01-03 15:47:28

标签: algorithm data-structures heap

我们有不同的产品(编号从1到m)。招标开放m天,在这些日子里,n人提出购买要约(每个产品是针对一种产品), 在每天结束时,将出售具有最高报价的产品(形成所有尚未售出的产品)。

我们应该实现一个提供以下操作的数据结构:

  1. Init(m) - >使用m个元素初始化DS而不提供
  2. 投标(J,P) - >在复杂度为O(1)摊销的产品j中添加价格为p的报价
  3. Sell->以最高报价销售产品。返回j(已售出的产品)和p(销售产品的价格)以复杂度O(log m)摊销。
  4. 我尝试使用斐波纳契堆来解决这个问题:

    • 我们创建一个新的fib堆并插入m次(带有键j和info null的产品)

    • 我在fib堆中使用reduce键的想法,并使用新的p切换信息

    • 我使用delete min的思想来删除max

    所以为了解决问题,我认为我应该使用最大堆而不是最小堆,这让我觉得我的方法错了。

    有人可以帮助我获得真正的解决方案吗? **

1 个答案:

答案 0 :(得分:0)

通过将产品的哈希表保持为最高出价,以及按最高出价排序的产品列表,您可以获得Bid()的O(log M)和Sell()的O(1)。

对于Bid(),您可以根据需要更新表格,并在需要时使用二进制搜索更新列表;对于Sell(),您只需弹出列表中的顶部项目并从地图中获取价格。