Algorithm 在点集中找到两个至少有一半直径距离的点的线性算法

Algorithm 在点集中找到两个至少有一半直径距离的点的线性算法,algorithm,computational-geometry,Algorithm,Computational Geometry,我被以下作业问题困住了: 考虑平面上的一个点集p,p |=n,让D(p)为p的直径,即p中任意两点之间的最大欧几里德距离。我的任务是找到一个O(n)时间的算法,在p输入时返回p的两个点x和y,D(x,y)>=D(p)/2,其中D表示欧几里德距离 我不知道我怎么能做到。你能给我一个提示吗?假设你的观点是(xi,yi) 使用min(xi)和O(n)查找点,并将其命名为minX\u点 使用max(xi)和O(n)查找点,并将其命名为maxX\u点 用min(yi)用O(n)查找点,并将其命名为minX

我被以下作业问题困住了:

考虑平面上的一个点集p,p |=n,让D(p)为p的直径,即p中任意两点之间的最大欧几里德距离。我的任务是找到一个O(n)时间的算法,在p输入时返回p的两个点x和y,D(x,y)>=D(p)/2,其中D表示欧几里德距离


我不知道我怎么能做到。你能给我一个提示吗?

假设你的观点是
(xi,yi)

  • 使用
    min(xi)
    O(n)
    查找点,并将其命名为
    minX\u点
  • 使用
    max(xi)
    O(n)
    查找点,并将其命名为
    maxX\u点
  • min(yi)
    O(n)
    查找点,并将其命名为
    minX\u点
  • max(yi)
    O(n)
    查找点,并将其命名为
    maxY\u点
  • 现在考虑将这4个点(具有水平和垂直边)框的矩形 此矩形的直径大于或等于D(P),因为所有P点都在其中。 矩形的直径如下所示

    Rec_Diameter=sqrt((minX-maxX)^2+(minY-maxY)^2)
    现在查找
    max((mixX-maxX),(minY-maxY))
    最大值将是您所需的点,例如
    maxX_点
    minX_点
    因为如果距离小于D(P)/2,那么我们有
    Rec_Diameter=sqrt((minX-maxX)^2+(minY-maxY)^2)
    哪个
    Rec_Diameter>=D(P)
    不是真的

    任何一点至少离直径中的两个点中的一点那么远……谢谢你的回答,但我听不懂。我们不能假设D(P)是给定的,算法唯一的输入是P,计算D(P)需要O(n log(n))时间,如果它离其他点更远,那就更好了。只是为了确保我正确理解你。我们选取一些任意点,比如x,然后计算P中所有其他点y的d(x,y)。然后我们只选取d(x,y)最大的y,对吗?