假设在2D平面中有一组点S,如何从S中移除最小点数,使得任意两个剩余点之间的距离不小于常数R.
我想这可能是NP难的。有谁能建议快速近似解决方案?谢谢!
答案 0 :(得分:1)
我的朋友建议合理的解决方案:
构造一个图G,其中所有边都小于R.要删除的点集与图G的最小顶点覆盖相同。顶点覆盖的近似是多项式时间。
答案 1 :(得分:0)
这个很快但不是最小点数。请记住,循环应处理在删除或禁用点时设置S的更改。
$string = '&OrigPlacedDate=41759.7128&';
$origPlacedDate = '/&OrigPlacedDate=([0-9]+\.[0-9]+)&/';
preg_match($origPlacedDate, $string, $origPlacedDateMatches);
echo $origPlacedDateMatches[1];
为了最低限度但价格昂贵:
For each Point P1 in S
{
For each Point P2 after P1 in S
{
If (square(P1.x - P2.x) + square(P1.y - P2.y) < square(R) )
{
remove (P2)
}
}
}