2011-01-06 65 views
0

我正在构建一个广度优先图搜索算法,用于搜索伦敦地铁。有效实现广度优先算法的动态队列

我有算法想通了,但你可能知道,算法需要为了一个队列广告来追踪所有需要搜索(以正确的顺序)的边缘。

我一直在阅读有关管理队列和大量或非常大量排队项目(边缘)的效率问题。

谁能告诉我如何实现基于围绕Java的ArrayList队列,可以跟踪头部和尾部,并且有效地管理内存,同时它的增长?

任何提示/指针非常感谢!

+0

我会问的第一件事是你真的有问题 - 是否让你等待?第二个是如果它让你等待你抽样,看看它最花时间在做什么。该FIFO可能是一个问题,但先验,可能不是。就像猜测一样,你应该能够每微秒处理1个节点,所以我不认为速度会成为问题。 – 2011-01-06 19:03:32

+0

我宁愿使用某种专门化的队列,因为它比我们的队列一直排序更麻烦。虽然这不是必需的,但我只想更多地了解队列以及如何完成它们。 – Alex 2011-01-06 19:16:08

+0

我想我不明白你为什么需要排序,但无论如何,@ Kim的答案看起来不错。 – 2011-01-06 19:19:06

回答

1

请记住,您将需要快速测试来查看您的对象是否已在队列中。 ArrayListQueue都不提供此功能(其contains检查是O(n))。如果您可以通过添加额外字段来修改正在处理的对象,则很容易。如果没有,你会想保持某种快速Set(可能是HashSet)来跟踪哪些对象在队列中。