Algorithm 有效地检查大型节点集合中的哪些节点靠得很近?

Algorithm 有效地检查大型节点集合中的哪些节点靠得很近?,algorithm,graph-theory,Algorithm,Graph Theory,我目前对生成随机几何图形感兴趣。对于我的特殊问题,我们将节点v随机放置在单位正方形中,并将一条边从v添加到节点u,如果它们有,根据您对问题的描述,我将选择A作为您的数据结构 它允许通过缩小需要对其运行D的顶点集进行非常快速的搜索。但是,在最坏的插入情况下,需要O(n)时间。谢天谢地,您不太可能用典型的数据集进行最坏情况的插入。根据您对问题的描述,我会选择一个作为您的数据结构 它允许通过缩小需要对其运行D的顶点集进行非常快速的搜索。但是,在最坏的插入情况下,需要O(n)时间。谢天谢地,对于典型的数

我目前对生成随机几何图形感兴趣。对于我的特殊问题,我们将节点v随机放置在单位正方形中,并将一条边从v添加到节点u,如果它们有,根据您对问题的描述,我将选择A作为您的数据结构


它允许通过缩小需要对其运行D的顶点集进行非常快速的搜索。但是,在最坏的插入情况下,需要O(n)时间。谢天谢地,您不太可能用典型的数据集进行最坏情况的插入。

根据您对问题的描述,我会选择一个作为您的数据结构


它允许通过缩小需要对其运行D的顶点集进行非常快速的搜索。但是,在最坏的插入情况下,需要O(n)时间。谢天谢地,对于典型的数据集,您不太可能遇到最坏的插入情况。

我可能只会使用binning方法

假设我们在
m x m
子正方形中切割单位正方形(当然每个正方形的边长
1/m
)。由于顶点是均匀随机放置的(或者我假设是这样),每个正方形平均包含
n/m^2
个顶点

根据
A1
A2
m
n
,您可能可以确定需要检查的最大半径。假设这小于
m
。然后,在插入
v
之后,您需要检查它降落的正方形,以及所有相邻的正方形。无论如何,这是一个恒定的正方形数,因此对于每次插入,您都需要平均检查
O(n/m^2)
其他顶点

我不知道
m
的最佳值(如前所述,这取决于
A1
A2
),但可以说是
sqrt(n)
,然后整个算法可以在
O(n)
预期时间内运行

编辑
一个小的补充:您可以跟踪具有许多邻居的顶点(因此具有高半径,延伸到多个正方形上),并检查每个插入的顶点。应该只有很少的,所以这没有问题。

我可能只会使用一种装箱方法

假设我们在
m x m
子正方形中切割单位正方形(当然每个正方形的边长
1/m
)。由于顶点是均匀随机放置的(或者我假设是这样),每个正方形平均包含
n/m^2
个顶点

根据
A1
A2
m
n
,您可能可以确定需要检查的最大半径。假设这小于
m
。然后,在插入
v
之后,您需要检查它降落的正方形,以及所有相邻的正方形。无论如何,这是一个恒定的正方形数,因此对于每次插入,您都需要平均检查
O(n/m^2)
其他顶点

我不知道
m
的最佳值(如前所述,这取决于
A1
A2
),但可以说是
sqrt(n)
,然后整个算法可以在
O(n)
预期时间内运行

编辑
一个小的补充:您可以跟踪具有许多邻居的顶点(因此具有高半径,延伸到多个正方形上),并检查每个插入的顶点。应该只有几个,所以没问题。

你说的“足够近”是什么意思?你想找到k近邻吗?不,我的意思是当我们放置v时,我们寻找v落在它的“影响圈”中的顶点u。圆的半径随顶点、图形的大小和几个用户定义的参数的不同而不同。您能详细介绍一下函数
D
?如果我理解正确,您将插入节点
v
,并需要为每个其他顶点
u
检查
D(u,n)
。如果
D
对您来说是一个黑框,那么您必须检查所有顶点。因为你想变得更聪明,显然
D
根本不是一个黑匣子……当然,影响圈面积的精确公式是
(A1*deg(u)+A2)/n
,其中
A1
A2
是用户定义的参数,
deg(u,n)
是时间
n
(=顶点数)。我们由此计算出
u
的半径。不过,大多数情况下,半径很小,并且不会随着新顶点的添加而增长。你说的“足够近”是什么意思?你想找到k-最近邻吗?不,我的意思是,当我们放置v时,我们会寻找v落在其中的顶点u“影响圆”。圆的半径随顶点的不同而变化,随图形的大小和几个用户定义的参数而变化。您能否详细介绍函数
D
?如果我理解正确,请插入节点
v
,并需要检查
D(u,n)
对于每个其他顶点
u
。如果
D
对你来说是一个黑匣子,你真的必须检查所有顶点。因为你想变得更聪明,显然
D
根本不是一个黑匣子……当然,影响圈面积的精确公式是
(A1*deg(u)+A2)/n
,其中
A1
A2
是用户定义的参数,
deg(u,n)
是时间
n
时的顶点
u
(=顶点数).根据这一点,我们计算出
u
的半径。不过,大多数情况下,半径都很小,并且不会随着新顶点的添加而增大。这似乎很可能奏效;感谢您指出这一点。这似乎很可能奏效;感谢您指出这一点。