算法-查找项目在队列中的位置

时间:2019-03-07 05:38:33

标签: algorithm data-structures

我有一个任意对象的数组

  1. 每个对象都有唯一的ID
  2. 新对象添加到队列的末尾(尾部)
  3. 从顶部删除对象进行处理(FIFO)
  4. 如果需要,可以删除待处理的对象。

问题是从给定id的尾部查找对象在队列中的当前位置。

最快的方法是什么?只是要清楚一点,我不希望从id中获得Object,所以哈希映射不是解决方案。我真正需要的是职位。

我们想到了两种方法:

  1. 强力,循环发现
  2. 在“对象”中添加一个新字段,该字段存储一个全局索引,对于添加到队列中的每个对象,该索引都会递增。然后,我们可以通过检查存储在最后一项和此项中的全局索引来快速获取位置。但是,唯一的复杂性是,如果删除了一个对象,则需要更新以下所有项目的全局索引。

还有更好的主意吗?请提出建议。

2 个答案:

答案 0 :(得分:0)

最简单的方法是将FIFO表示为双链表。该列表可以是Object个(意味着如果您有一个ID,则还需要一个从ID到对象的映射,哈希映射或其他方法)或独立的FIFO节点(其中如果您有从ID到节点地址的映射)。

答案 1 :(得分:0)

我相信我有一个log(n)时间解决方案。构造一个哈希表,将每个ID映射到我们其他数据结构中的节点-自平衡二进制搜索树(红黑色,AVL,无论您喜欢什么)。在此树中,应按队列中节点的相对优先级/顺序对其进行排序。它还应在树中存储指向其父级的指针,并且子树的大小应以其自身为根。由此,我们可以查询对数时间中优先级/顺序较低的元素数。