小编Jar*_*vis的帖子

搜索点网格,仅对每个点进行一次访问

我有一个(d)维的网格,所有维度都使用delta = 0.25进行分区

此网格的一个示例是此图(d此处为2,每个维度标准化为0-1):

在此输入图像描述

每个交叉点代表1个点,例如,中间的点表示为:

double[] A={0.5, 0.5};
Run Code Online (Sandbox Code Playgroud)

我的问题是:我想从输入点A及其邻居开始搜索此网格.然后继续这样做.有一个条件:每个点只访问一次.

为了澄清更多,请考虑以下示例:起点是:

double[] A={0.5, 0.5};
Run Code Online (Sandbox Code Playgroud)

因此,首先检查A,然后生成其邻居并将其插入队列(队列基于函数f排序).

在此输入图像描述

这里A点是黑圈.它的邻居是绿色圆圈:

{0.25, 0.25}
{0.25, 0.5}
{0.25, 0.75}
..
..
..
{0.75, 0.75}
Run Code Online (Sandbox Code Playgroud)

现在,算法循环,直到Queue变空.在循环中,删除顶点(pop()),然后检查,然后将其邻居添加到队列中.

在此输入图像描述

例如,在第一个循环中,蓝色圆圈恰好是队列中的顶点.它将从队列中删除,然后进行检查,然后生成其邻居(红色圆圈)并将其添加到队列中.

这里的问题是,我生成邻居点的代码不知道之前是否访问过前一个点.

我不能保留以前访问过的点的列表,并在每次生成新点时检查它(具有高维度和高分辨率,例如,d = 8和delta = 0.03125,它将永远需要!)

这是搜索算法:

public void search(int d, double delta, double[] inpoint)
{
    Queue queue = new Queue();
    queue.push(inpoint);

    while( !queue.isEmpty() )
    {
        // remove top point from Queue
        double[] a = queue.pop();

        // Check point a and do some calculations
        // ;;;;;;;;;;;;;;;;

        // Generate neighbours of …
Run Code Online (Sandbox Code Playgroud)

java grid search

6
推荐指数
1
解决办法
492
查看次数

标签 统计

grid ×1

java ×1

search ×1