在巨大的内存空间中搜索自由位置

时间:2012-03-29 04:34:16

标签: data-structures

实际问题如下:您将使用什么数据结构在有数百万个点的停车场找到免费停车位?

我的想法:

  • 我可以使用LinkedHashMap并继续将自由点移动到队列的前面,但我认为这不是正确的解决方案。

有什么想法吗?

6 个答案:

答案 0 :(得分:2)

您已经知道停车结构的大小(一百万个插槽),这在物理上是有意义的。所以如果你需要的所有信息都是空的,那么使用一个位数组,其中空位是假的并且被占用是真的

boolean slots[] = new boolean[1000000];

如果您需要存储更多信息,例如插槽中的汽车信息,插槽距离最近入口的距离等,请使用:

 Slot[] slots = new Slot[1000000];

和Slot类类似于

public class Slot{
    Car car;//object for car in slot
    boolean occupied;//whether slot is vacant: may be redundant
    Cost cost;//a set of fields: distance from entrance; parking fee for "good" slots, etc.
}

所以你继续......

答案 1 :(得分:0)

PriorityQueue,其中优先级定义为停车位和入口之间的距离。

答案 2 :(得分:0)

我会使用一套位,其中每一位代表停车位。值1表示免费,0表示已使用。对自由点进行线性搜索应该可以胜任。非常容易实现,并且asm足够快。

答案 3 :(得分:0)

改进kasavbere的解决方案,如果您有选择,我建议使用BitSet / BitArray类。 BitSet使用long数组,每个long值代表64个插槽。与布尔 [Arrays of booleans typically occupy 1 byte per element]相比,这有效地将阵列的总大小减少了8倍。 BitSet还提供了从特定索引获取下一组或空闲槽的方法,因此您不必为此编写自己的方法。

答案 4 :(得分:0)

我们可以使用队列。

队列在开始时包含所有百万条目。如果停车位 需要 出列。如果停车位变为 免费 enque

答案 5 :(得分:0)

  1. 维护一个阵列,基本上可以容纳1到n辆汽车,其中n是停车场的大小。维护停车场号码的最小堆(PriorityQueue)。每当有新车进来时,检查阵列是否已满,是否在队列中查询最近的批号。轮询删除队列中的最小值,并将其用作数组的索引。
  2. 一旦汽车离开现场,将该点添加回队列。未来的民意调查将返回下一个最近的停车场。