algorithm - 如何在一维中找到一组唯一的最近点对?
问题描述
我的问题与这个问题非常相似: 如何找到一组唯一的最接近的点对?
唯一的区别是我是一维的。
所以,我有两组点(因为我在 1D 中,我们可以将它们视为 0 到 1 之间的数字)A 和 B,每个点分别包含 m 和 n 元素,m<=n
我的目标是找到集合 C,由 B 中的 m 个 DISTINCT 点组成,以最小化距离之和 [A(i), C(i)] 如果 m = n,我可以使用具有很好的一维实现的 wasserstein 距离在 2D 中,我会使用匈牙利算法,但它相当昂贵,我希望 1D 有更快的解决方案。
谢谢
解决方案
大声思考:
对于 A 中的每个点,在两侧找到 B 中最近的两个点是一件容易的事。因为这足以对 A 和 B 进行越来越多的排序,并且通过类似合并的过程,您可以在 A 的每个点的 B 中找到前任和后继。
这个过程的成本是 O(NA Log NA) + O(NB Log NB) + O(NA + NB),其中最后一项可以被吸收。
最小的总和将通过为每个点分配其最近的邻居来实现,在左侧和右侧。
到目前为止一切顺利,但不幸的是,最近的邻居也可能是离 A 中的相邻点最近的,并且需要仲裁冲突(必须将 A 点之一分配给它的另一个 B 邻居)。在最坏的情况下,这可能会导致级联冲突。
到目前为止,我担心这个问题是全球性的,我认为没有比尝试以所有可能的方式解决冲突并保持最佳配置更好的方法了。这个过程在冲突点序列的长度上是指数的。
推荐阅读
- informatica - Informatica 云 (IICS) 未从字段名称以数字 (10CL_xyz) 开头的 SQL 服务器加载字段
- f# - 如何使用正则表达式检查字符串是否为日期 F#
- xero-api - 我一直卡在使用 xero-php-oauth2-app-master 进行授权
- javascript - 将语音频道中的所有人静音,某些角色除外
- r - 从名称在变量中的列中选择行
- leaflet - 地图拖动后保持关注画布层
- c++ - 编译的 Elf 二进制文件太大
- python-3.x - 根据规则拆分 spark DataFrame 的最有效方法
- flutter - 在 Flutter Cloud Firestore 中设置自定义文档 ID
- javascript - 为 JSX 元素节点生成唯一的 id - React