我有一个(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)