【发布时间】:2014-11-21 20:36:04
【问题描述】:
我的情况如下:
- 我有一个实体集合,每个实体都有一个“善良”属性。
- 我希望一次抓取一个实体,从“最佳”到“最差”。
- 在抓取“最佳”实体后,我的其他实体中的几个(相对较少)的“好”属性会发生变化,并且此更改必须纳入我即将做出的下一个“最佳”实体的决定中。
- 一些(相对较少的)实体在被抓取后可能会变得“毫无价值”,这些应该从我的收藏中删除。
- 考虑到我刚刚抓取的实体,我很容易构建现在“脏”对象的集合,即可能具有现在不同的“优点”或已经成为的实体集合“一文不值。”
所以,我需要一个数据结构,让我能够:
- 快速抓取“最大”的集合(例如,最大堆)。
- 快速更新我的集合中对象的基本顺序以适应上述情况。 (如果我们可以在底层堆实现中访问脏对象的位置,例如数组索引,那么在堆中很容易做到。)
- 保证我的收藏条目之间没有冲突。 (这些条目是对我上面描述的实体的引用。)
我的想法是将最大堆与无序映射一起使用,以堆条目为键,并且具有等于例如对象在堆实现中的底层数组中的相应索引的值。
我想知道是否存在更适合这种情况的数据结构。
【问题讨论】:
-
定义“相对较少”的 1/10 元素? sqrt(n) 的元素?元素的日志(n)?日志(日志(n))? .... 每次迭代需要更新的元素的规模是多少?
-
抓取后需要更新的实体数量对于我们来说可以被视为常量。更重要的是,会有一些与原始实体数量大致呈线性关系的抓取。
-
物品好坏的更新是不是越来越好?
-
抱歉,这是个好问题,我应该解决这个问题。实体只会变得更糟。尽管如此,如果我们提出的任何解决方案都能奏效,即使实体被允许变得更好,那将是一件好事。
-
我想不出更好的了。但即使我能做到,你也只能得到一个不断改进的因素。很可能这对您的实际问题并不重要。
标签: algorithm data-structures map heap