在两个集合之间映射元素的算法

标签 algorithm math optimization

我有两组向量,A 组和 B 组。假设 A 组包含 100 个向量,B 组包含 50 个向量。我有自己的方法来测量任意两个向量之间的距离。目标是将集合 A 中的向量映射到集合 B 中的向量,其距离在特定阈值内。现在,如果两个向量之间的距离不在特定阈值内,那么它们就不会配对。映射是一对一的,即集合 A 中的一个向量只能映射到集合 B 中的一个向量,反之亦然。

因此,最终可能会发生这样的情况,即集合 A 中的 40 个向量映射到集合 B 中的 40 个向量。因此,集合 A 中的 60 个向量未与集合 B 中的任何向量配对。因此,集合 B 中的 10 个向量是也未配对。

现在,如果我将集合 A 中的向量标记为 A1、A2、A3 ... A100 并将集合 B 中的向量标记为 B1、B2、B3 ... 等等,那么最有效的迭代方式是什么两组并进行配对。

如果需要额外说明,请告诉我。

最佳答案

您需要做的是首先查看 A 中的哪些向量可以与 B 中的哪些向量配对。这是用 O(n^2) 复杂度完成的,并将创建一个二部图 - 您有两个顶点分区 - A 中的向量和 B 中的向量,当且仅当 A 中的向量可以与 B 中的向量配对时,你才有一条边。 构建图形后,您需要找到最大二分匹配,这通常使用流来完成。看看here例如。我个人使用Dinitz流的算法。

希望这对您有所帮助。

关于在两个集合之间映射元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101068/

相关文章:

android - 有什么办法可以简化权限检查吗?

algorithm - 尝试理解四叉树概念并将其应用于存储图像的着色信息

c++ - 数学函数基本集成的解决方案

java - Apache Commons Math 的标准偏差

c++ - 生命周期短的分配会导致堆碎片吗?

algorithm - 以尽可能少的比较对元素进行排序

algorithm - 如何在特定时间内按特定因素改变速度,同时在不同的帧率下保持一致?

algorithm - 游戏服务器 : Packet Analyzation

algorithm - 关系数据库中的时间表建模

c - C 中 0 和 1 之间的数字幂