在给定欧几里德距离内的2D空间中查找移动节点对?

时间:2012-05-08 03:02:03

标签: algorithm graph simulation graph-algorithm

我正在寻找模拟放置在2D空间并具有固定的有限通信范围的移动设备。我需要能够确定哪些节点对在彼此的范围内,并确保在顶点移入或移出范围时相应地更新边。我希望有1000个节点或更多的节点,所以每个时间步进行完全成对比较(O(n ^ 2))是不可行的。顶点将使用不同的方向和速度移动,因此我假设预测路径的“预测”方法同样困难。我假设所有顶点都具有相同的通信半径。

现有的模拟环境或Java库是理想的,但算法也会有所帮助。像ns-2这样的硬件仿真环境对于我正在寻找的简单功能而言极其过分。

2 个答案:

答案 0 :(得分:2)

一个典型的简单解决方案是将空间划分为网格。如果通信范围是R,您可以使用例如R作为网格间距系数。在网格的每个单元格中,您将持续维护属于该单元格的那些节点的列表/集合。现在,为了找到移动设备M的邻居,足以检查其自己的小区内的移动设备以及该小区的邻居。显然,您也可以使用其他间距因子。如果不是每个移动设备都相互连接,这会加速很多。

答案 1 :(得分:0)

正如@ antti.huima所说,我们应该将eucliden空间划分为网格,但找到网格的大小将取决于需求。我不确定我们是否可以使群集脱离网格,但使群集更有效率。 假设移动设备按delta移动一点..并且移出群集说C1到相邻群集说c2所以我们的移动设备应该与群集中给定范围的所有移动设备配对说C2 ...所以在这个过程中我们不要需要使用所有剩余的N-1个元素更新配对事件,但只需要使用集群中的元素。我们更倾向于假设簇半径为2R,其中R是我的推算中的移动范围。因此,当一个集群从C1移动到相邻的集群时,它周围将会有大约8到10个集群(想象为圆圈),因此应该将节点或移动设备与这个8到10个元素集群的元素进行比较..这样我们正在减少数量配对