我的情况如下:
所以,我需要一个允许我的数据结构:
我的想法是将max-heap与无序映射一起使用,键入堆条目,并使值等于例如对象'堆实现中底层数组中的相应索引。
我想知道的是,是否存在更适合这种情况的数据结构。
答案 0 :(得分:1)
如果抓取最佳实体时很少有成员受到影响,那么您可以通过使用链接列表和无序映射(每个都包含原始实体集)和最大堆来改进运行时。从链接列表的末尾删除最佳实体后,您将使用该映射来查找受影响的实体,将其从列表中删除,并将无值的实体添加到最大堆中。此后,下一个最佳实体是列表末尾的实体或堆中的最大实体中的较大者。此设置的优点是从链接列表中删除是一个恒定时间操作,并且插入最大堆将相对较小(与实体总数相比)日志时间操作。
因为实体'值只会变得更糟,你可以懒洋洋地将它们从链表中删除 - 如果该项目毫无价值,则将其删除,如果其值已更改,则将其标记为"已更改。"检查"已更改"在链表末尾的实体上标记,如果它是真实的"然后删除实体并将其添加到max-heap。延迟更新的优点是您通常不需要更新堆中的项目(您只需更新链接列表中项目的值),并且如果项目已更改并且然后你变得毫无价值,然后你就可以将它从链表中删除而无需将其添加到堆中。