- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定平面上的 n 个点。 No 3 共线。
给定数字 k。
找到k个点的子集,使得k个点的凸包在k个点的子集的任何凸包中具有最小周长。
我能想到一个天真的方法在 O(n^k k log k) 中运行。 (找到大小为k的每个子集的凸包并输出最小值)。
我认为这是一个 NP 问题,但我找不到任何适合归约到的问题。
有人对这个问题有想法吗?
一个例子,
the set of n=4 points {(0,0), (0,1), (1,0), (2,2)} and k=3
结果:
{(0,0),(0,1),(1,0)}
由于该集合包含 3 个点,因此结果的凸包和周长小于任何其他 3 点集合。
最佳答案
这可以在 O(kn^3) 的时间和 O(kn^2) 的空间内完成(或者如果你想要实际的点,则可能是 O(kn^3))。
本文:http://www.win.tue.nl/~gwoegi/papers/area-k-gons.pdf
Eppstein 等人的算法可以解决最小周长和其他权重函数(如面积、内角之和等)的问题,这些函数遵循一定的约束条件,即使标题说的是最小面积(周长见推论 5.3)。
基本思想是如下动态规划方法(阅读第 4 节的前几段):
假设S是给定的点集,Q是k个点的最小周长的凸包。
设 p1 是 Q 的最底部点,p2 和 p3 是船体上逆时针顺序的下一个点。
我们可以将 Q 分解为一个三角形 p1p2p3 和一个由 k-1 个点组成的凸包 Q'(它与三角形 p1p2p3 共享边 p1p3)。
主要观察是Q'是k-1的最优值,其中最底部的点是p1,下一个点是p3,Q'的所有点都位于直线p2->p3的同一侧.
因此为每个四元组 (pi, pj, pk, m) 维护一个最佳多边形的 4d 数组,使得
可以帮助我们找到 m=k 的最佳多边形,给定 m <= k-1 的最佳多边形。
这篇论文准确地描述了如何去做才能达到规定的空间和时间范围。
希望对您有所帮助。
关于algorithm - 点集子集的最小周长凸包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3087372/
我正在尝试对具有 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
我是一名优秀的程序员,十分优秀!