Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 列出由具有给定半径的圆包围的所有点集_Algorithm_Geometry_Computational Geometry - Fatal编程技术网

Algorithm 列出由具有给定半径的圆包围的所有点集

Algorithm 列出由具有给定半径的圆包围的所有点集,algorithm,geometry,computational-geometry,Algorithm,Geometry,Computational Geometry,我的问题是:给定平面上的N个点和一个数字R,列出/枚举所有点的子集,其中每个子集中的点由半径为R的圆包围。两个子集应不同,且不相互覆盖 效率可能并不重要,但算法不应该太慢 在一种特殊情况下,我们能找到点最多的K子集吗?可以接受近似算法 谢谢 编辑:这句话似乎不太明白。我的错 所以我重申我的问题如下:给定N个点和一个半径为R的圆,用这个圆来扫描整个空间。一次,圆将覆盖一部分点。我们的目标是列出这样一个R半径圆可以覆盖的所有可能的点子集。一个子集不能是其他子集的超集 我不确定我是否明白你所说的“未覆

我的问题是:给定平面上的N个点和一个数字R,列出/枚举所有点的子集,其中每个子集中的点由半径为R的圆包围。两个子集应不同,且不相互覆盖

效率可能并不重要,但算法不应该太慢

在一种特殊情况下,我们能找到点最多的K子集吗?可以接受近似算法

谢谢

编辑:这句话似乎不太明白。我的错


所以我重申我的问题如下:给定N个点和一个半径为R的圆,用这个圆来扫描整个空间。一次,圆将覆盖一部分点。我们的目标是列出这样一个R半径圆可以覆盖的所有可能的点子集。一个子集不能是其他子集的超集

我不确定我是否明白你所说的“未覆盖”是什么意思。如果你放弃这个,你要找的正是一个复杂度很高的Cech复合体,如果你没有采样条件,你就不会有有效的算法(采样应该足够稀疏,R不要太大,否则你可以有2^n个子集,其中n个点)。您必须枚举所有子集,并检查其最小封闭球半径是否小于R。您可以将搜索范围缩小到直径小于R的所有子集(例如,成对距离小于R),这在您的情况下可能足够了


如果两个子集的“未覆盖”意味着其中一个子集未包含在另一个子集中,则可以有许多不同的分解。感兴趣的是阿尔法复合体,因为它可以在2-3维的O(nlogn)中有效地计算(我建议使用它来计算,你也可以看到它在图片中的含义)。如果你的点是高维的,那么你可能最终会计算出一个切赫复合体。

在不丧失一般性的情况下,我们可以假设所考虑的封闭圆至少通过两个点(忽略没有点或一个点的琐碎情况,并假设您的动机是最大化密度,这样您就不在乎是否忽略了非最大子集)。在输入点上构建一个邻近结构(kd树、覆盖树等)。对于每个输入点p,使用该结构查找所有点q,以便d(p,q)≤ 2R.对于每个点q,有一个或两个圆在其边界上包含p和q。通过求解一些二次方程找到它们的中心,然后在q的其他选择中寻找子集。

问题在哪里?你尝试了什么?什么约束?什么语言平台?你说的太慢是什么意思(10秒,2年)?