【发布时间】:2012-06-24 08:51:54
【问题描述】:
我正在(在 Java 中)研究一种递归图像处理算法,该算法从中心点向外递归遍历图像的像素。
不幸的是,这会导致堆栈溢出。所以我决定改用基于队列的算法。
现在,这一切都很好——但考虑到它的队列将在很短的时间内分析数千个像素,同时不断弹出和推送,而不保持可预测的状态(它可能介于长度为 100 和 20000),队列实现需要具有显着的快速弹出和推送能力。
链表看起来很有吸引力,因为它能够将元素推送到自身而不重新排列列表中的任何其他内容,但为了使其足够快,它需要轻松访问其头部和尾部(或倒数第二个节点,如果它不是双重链接的)。可悲的是,我找不到与 Java 中链表的底层实现相关的任何信息,所以很难说链表是否真的是要走的路……
这让我想到了我的问题。对于我打算做的事情,Java 中 Queue 接口的最佳实现是什么? (除了队列的头部和尾部之外,我不希望编辑甚至访问任何东西——我不希望进行任何类型的重新排列或任何事情。另一方面,我确实打算做很多推送和弹出,队列的大小会发生相当大的变化,因此预分配效率低下)
【问题讨论】:
-
也许你需要退后一步,想想是否有比将数千个单独的像素一个一个地推入数据结构更好的方法(如果这确实是你正在做的)。
-
这是一种blob检测算法,其思想是从blob上的一点开始,向外遍历到blob的边缘。我不相信有任何其他(简单)方法可以做到这一点。此外,队列只存储兴趣点——它实际上并没有将像素保留在队列中,队列主要只是用作跟踪它所在位置的一种方式。类似于很多寻路算法