- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在谷歌上搜索这个问题并不是很成功,因为大多数凸包讨论都假设您想要一个最小边界框,并且对于如何将这个最小包边界填充到“完整”包中非常模糊。这里的“完整”仅仅意味着位于最小凸包边缘上的任何点都被添加到凸包中。
为了清楚起见,这里有一个非常简单的例子。假设我们在二维空间中有 n=9 个顶点。为简单起见,我将它们从 0 到 8 进行索引。
[0] = (0; 0)
[1] = (0; 1)
[2] = (0; 2)
[3] = (1; 0)
[4] = (1; 1)
[5] = (1; 2)
[6] = (2; 0)
[7] = (2; 1)
[8] = (2; 2)
我们可以在 O(nlogn) 中使用 Graham 扫描找到最小边界框。 还有其他算法可以在 O(nlogh) 中执行此操作,但让我们一开始就让事情保持简单。最小外壳是 [0, 2, 6, 8](或 [0, 8, 6 , 2]; 这并不重要)。 “完整”外壳将是除 [4] 之外的所有顶点。我应该如何对最小船体进行后处理以获得“完整”船体而不将复杂性增加到 O(n^2)?
显然,更改 GS 算法以包括共线点(>0 到 >=0 或 <0 到 <= 0)是行不通的。我必须使用其他算法吗?
哦,还有一件事:为了这个问题,请假设 h ~= n,以便 O(n * h) 实际上是 O(n^2)。
因为人们拒绝相信我提供的示例导致 GS 在将顶点产品比较更改为包含零时失败。下面是反例的解释:
通过任何方式找到角点(如果按照 wiki 所说的那样做并不重要,首先是最低的 Y,然后是最低的 X,或者首先是最低的 X,然后是最低的 Y,或者反转序)
给凸包加角
按照极角对剩余的点进行排序(再次说明,只要所有操作都正确调整,无论是在 Ox 轴还是 Oy 轴上完成都没有关系)
这些点对将具有相等的极角:[1, 2]、[3, 6]、[4, 8]。如果你允许它们任意排列,这肯定会杀死 GS,因为你可能会尝试 0 6 3 7,之后 GS 将永久从凸包中删除 3 作为无效顶点(同样适用于 [ 1, 2] 对)。
正如我所见,典型的极角相等决胜局是根据它们与角点的距离对它们进行排序。但是,如果您决定首先订购距离较远的点,则 GS 将必须取 0 6 3 7,这将 3 标记为非船体点。另一方面,如果您对距离角点较近的点进行排序,您将采用 [...] 5 1 2 0,这将导致 GS 将 2 标记为非船体点。
问题是,我们能否通过精心设计的极角排序策略或后处理来解决这个问题。
最佳答案
这是一个时间复杂度为 O(log h) 的算法,给定一个具有排序顺序的 h 个顶点的凸包和一个查询点,测试查询点是否位于包上。从船体,通过平均三个顶点来计算内部的一个点。称此点为原点。将平面分成楔形,这些楔形由从原点通过船体顶点的光线界定。使用带方向测试的二分搜索来确定查询点属于哪个楔形。测试它是否位于该楔形的船体段上。
如果您已经实现了 Graham 扫描,则可以仅通过更改测试来保留共线点,但您需要确定相对于与其他两个船体点不共线的原点的角度。这样的点可以通过取不共线的三个输入点的平均值来获得。
关于algorithm - 在小于 O(n^2) 的时间内找到 "complete"凸包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063630/
我正在尝试对具有 950 个样本和大约 5000 个特征的数据使用套索优化。套索函数是 $(1/(2 * numberofsamples)) * ||y - Xw||^2_2 + alpha * ||
我需要列出位于给定坐标精度(比如 1)的特定多边形内部的所有坐标。这意味着,多边形边界的所有坐标都将是整数。多边形可以是凸面或凹面。 我有边界的所有坐标,coords[n][2] 这是我解决问题的方法
我的 Ubuntu 服务器上运行着一个 squid 3.3。在我的 squid ssl-bump 配置中,由于 squid3 -k 重新配置,我收到以下错误。 错误: 致命:错误的 squid.con
抱歉我的英语不好。 我想找出大量线性方程的下包络线。这映射到在其双平面中找到上(凸)壳的问题。 据我调查,有几种方法可以找到上层船体,但它们仅适用于 2-3 维。 但是,我的数据是高维的,有可用的库来
这个有点难解释。我有一个整数列表。因此,例如,[1, 2, 4, 5, 8, 7, 6, 4, 1] - 当根据元素编号绘制时,它类似于凸图。我如何以某种方式从列表中提取此“形状”特征?它不必特别准确
我想创建类似图片的东西,#body 位于#leg1 和#leg2 之间,其中三个应该水平对齐到底部。知道如何实现这一目标吗?我调整了一些属性,例如 display:inline 或 float:lef
我是一名优秀的程序员,十分优秀!