需要更好的算法来查找 2 组具有最小距离的点之间的映射

2024-02-26

Problem:我有两个重叠的 2D 形状,A 和 B,每个形状具有相同数量的像素,但形状不同。形状的某些部分是重叠的,而每个形状的某些部分是不重叠的。我的目标是将形状 A 中的所有不重叠像素移动到形状 B 中的不重叠像素。由于每个形状中的像素数量相同,所以我应该能够找到 1 对 1 的映射像素。限制是我想找到最小化所有移动像素移动的总距离的映射。

蛮力:解决这个问题的蛮力方法显然是不可能的,因为我必须计算所有可能的映射的总距离,我认为其中有 n! (其中 n 是一个形状中不重叠像素的数量)乘以计算映射中每对点的距离的计算量 n,总共为 O( n * n! ) 或类似的值。

回溯:我能想到的唯一“更好”的解决方案是使用回溯,我会跟踪到目前为止的当前最小值,并且在评估某个映射时的任何时候,如果我达到或超过该最小值,我会继续前进到下一个映射。即使这样也不会比 O(n!) 更好。

有没有办法以合理的复杂度来解决这个问题?

另请注意,简单地将点映射到其最接近的匹配邻居的“明显”方法并不总是能产生最佳解决方案。

更简单的方法?:作为第二个问题,如果不存在可行的解决方案,一种可能是将每个不重叠的部分划分为小区域,并对这些区域进行映射,从而大大减少映射的数量。为了计算两个区域之间的距离,我将使用质心(该区域中像素位置的平均值)。然而,这提出了我应该如何进行分区以获得接近最佳答案的问题。

任何想法表示赞赏!


这就是最小匹配问题,你是对的,这通常是一个难题。然而对于二维欧氏二分最小匹配 http://maven.smith.edu/~orourke/TOPP/P6.html在这种情况下,它可以在接近 O(n²) 的时间内解决(请参阅链接)。

对于快速近似,FryGuy 的模拟退火走在正确的轨道上。这是一种方法。

还看一下平面内二分和非二分匹配的近似算法 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.8281对于 O((n/ε)^1.5*log^5(n)) (1+ε)-随机近似方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要更好的算法来查找 2 组具有最小距离的点之间的映射 的相关文章

  • 有没有办法在 asp 图像控件上显示动态生成的位图?

    在我的代码中 我使用 C 和 ASP NET 动态创建位图 我需要将其显示在 asp 图像控件上 无论如何 有没有办法在不使用处理程序的情况下做到这一点 使用 ashx 处理程序更好 因为它适用于所有浏览器 并且您可以在客户端上缓存输出图像
  • 从二维排序数组中查找第 k 个最大元素

    我有一个二维数组 行和列已排序 如何从二维数组中找到第 k 大元素 如果你有一个n n矩阵 那么可以在平均时间内完成此操作O n log n log n 您所做的是将矩阵分解为一系列排序数组 然后立即对所有数组进行二分搜索 例如假设n 4并
  • iOS心率检测算法

    我正在尝试在我正在开发的应用程序中实现心跳记录功能 首选方法是使用 iPhone 的摄像头 在灯亮的情况下 让用户将手指放在镜头上 然后检测视频源中与用户心脏相对应的波动 我通过以下堆栈溢出问题找到了一个非常好的起点here https s
  • 查找所有n位相邻数字为1的n位二进制数[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 让我用一个例子来解释一下 如果n 4
  • 使用矩阵代数来操作字符串:可行吗?

    我正在尝试使用矩阵代数来操作字符串 这意味着能够使用字符串或字符串数 组的串联和粘贴来实现多个类似矩阵的结构 我之前尝试在 R 上实现这个东西 但这是不可能的 因为矩阵只能有一维条目 我希望足够的与语言无关和抽象 但为了清楚起见 我将使用类
  • 如何计算python 2D散点占用面积

    我使用 matplotlib 绘制了这两个 2000 个点的序列 从图片上看 前2000点占用的面积比后2000点要小 但如果我想定量计算2000个点的第一序列和第二序列占用了多少面积 该怎么办 我真的很感谢任何帮助 建议或意见 非常感谢
  • 比 in_array 更快?

    我需要将一个值与一组数组进行比较 但是 我需要比较 foreach 中的多个值 如果使用 in array 它可能会很慢 非常慢 有没有更快的替代方案 我当前的代码是 foreach a as b in array b array 谢谢 你
  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • 使用 Javascript 旋转图像

    首先 我目前正在使用 JQuery 因此 JQuery 解决方案可行 我想将图像旋转动态 X 度 每秒计算一次 现在我用这个完美地工作了Jquery旋转插件 http code google com p jqueryrotate 图像每秒完
  • 找到质数?

    为了判断 N 是否是质数 我们只需要查找所有小于或等于 sqrt N 的数字 这是为什么 我正在编写 C 代码 因此试图理解其背后的原因 如果 N 是一个正整数 且能被两个正整数 1 和 N 整除 则 N 是素数 由于数字的约数不能大于该数
  • 将大数字转换为字母(然后再转换回来)

    是否有一个术语来描述将大数字存储为字母的想法 例如 假设我有 相对较小的 数字 138201162401719 并且我想将字符数缩小到尽可能少的字符数 我知道这无助于节省磁盘空间 英文字母表中有 26 个字母 但我将它们算作 25 个 因为
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • 如何获取 android.widget.ImageView 的宽度和高度?

    ImageView Actual image 60px height of ImageView
  • 如何从本地计算机或网络资源在 Jupyter Notebook 中嵌入图像或图片?

    我想将图像包含在 jupyter 笔记本中 如果我执行以下操作 它会起作用 from IPython display import Image Image img picture png 但我想将图像包含在 markdown 单元格中 并且
  • 在 Rails 应用程序中查找未使用的图像?

    我熟悉类似的工具自重 http github com aanand deadweight用于查找 Rails 应用程序中未使用的 CSS 但图像是否存在任何内容 我正在参与一个项目 其中包含与各种设计师合作的大量资产目录 并且我正在努力减少
  • 趋势线的最佳拟合曲线

    问题约束 数据集的大小是已知的 但数据本身并不已知 数据集每次增长一个数据点 趋势线一次绘制一个数据点 使用样条 贝塞尔曲线 Graphs 下面的拼贴画显示了具有相当准确的趋势线的数据集 这些图表是 左上 按小时计算 大约有 24 个数据点
  • 映射枚举列表

    我有一个名为 UserPermissions 的表 其中通过 userId 与用户表进行 FK 然后是一个用于枚举字符串值的字符串列 我看到的错误是 NHibernate MappingException 表 UserPermissions
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • PHP 中的 imagecolortransparent 不起作用

    我想改变图像中的白色 http www arso gov si vreme napovedi 20in 20podatki radar gif http www arso gov si vreme napovedi 20in 20podat

随机推荐

  • 在 jenkins docker 容器内执行 docker host 命令

    我有一个运行 jenkins 的 docker 容器 我想在这个容器内部启动其他容器 所以在这个容器外部 我尝试用以下命令启动我的詹金斯控制器 docker run v var run docker sock var run docker
  • 如何缩小 Ruby 源文件?

    我有一种情况 我希望能够minify 未编译 Ruby 脚本 目标是 减少脚本的整体字符数 执行一定程度的混淆 使其他人难以修改代码 我们可以假设 是的 我知道我在做什么 而且我确实想缩小和混淆代码 Ruby 源代码具有简单的语法 并且不使
  • 列出 Google Drive 中所有文件的脚本:Api、cURL 和 Bash

    这是一个 bash 脚本 使用 cURL 列出我的 Google Drive 帐户 不是与我分享文件 只有我自己的文件 您必须在您的帐户中授予对 Google Drive API 的访问权限 并在脚本中填充变量 idclient and i
  • SSE 双线性插值

    我正在紧密循环中实现双线性插值 并尝试使用 SSE 对其进行优化 但我从中得到的加速为零 这是代码 非 SIMD 版本使用简单的向量结构 可以定义为struct Vec3f float x y z 实现乘法和加法运算符 ifdef USE
  • 禁用时更改开关颜色

    我有一个开关 当启用并选中时 它的颜色是我的 colorPrimary 我希望在检查但禁用时具有相同的颜色 但我找不到完成它的方法 我尝试使用选择器 但它改变了开关背景而不是切换本身 如何更改开关颜色 Thanks 1 在 styles x
  • 复选框确认消息 - 如果为 false,则保持选中状态

    我目前正在尝试在用户尝试取消选择选项时添加 JavaScript 确认消息 如果用户在确认屏幕上选择取消 则该复选框应保持选中状态 我遇到的问题是 即使我返回 false 该复选框也不会被选中 代码示例可以在这里找到http jsfiddl
  • 使用 python 的 CentOS 上的 Hadoop 流示例 - /mapred/local/taskTracker 上的权限被拒绝

    我已经能够使用 python 映射器和减速器设置流示例 mapred文件夹位置是 mapred local taskTracker root 和 mapred 用户都拥有此文件夹和子文件夹的所有权 但是 当我运行流式传输时 它会创建地图但不
  • NSString 中某个字符出现的次数

    我有一个NSString or NSMutableString并希望获得特定字符出现的次数 我需要对相当多的字符 在本例中为大写英文字符 执行此操作 所以速度快一点就好了 您可以在一行中完成此操作 例如 计算空格数 NSUInteger n
  • 我可以使用循环来最小化 ES6 import 语句吗?

    我检查了文档中的 导入 觉得不可能像数组元素一样对待导入的名称 欢迎任何处理这种情况的建议 import C1 from samples sample1 import C3 from samples sample3 import C4 fr
  • Drupal 对数据库执行查询

    我希望从我的 drupal 数据库中检索一些 nid 我有一个想要运行的查询 SELECT node nid AS projectnid FROM node node INNER JOIN content type project node
  • Xcode 13 中的 Info.plist 在哪里? (缺失,不在项目导航器内)

    有谁知道如何添加 编辑值Info plistXcode 13 还没到吗 我看到他们移动了Info plist从导航器窗格 但是虽然我可以找到它 但我不知道如何编辑它 这是一个 功能 你不再需要它了 来自发行说明 https develope
  • 运行进程时隐藏 vb.net 中的命令窗口

    如果我有这个代码 Send file to Unix server via pscp Dim Proc As New System Diagnostics Process Proc StartInfo New ProcessStartInf
  • 不小心把代码发布了。如何防止再次发生?

    最近我们发生了一起事件 一些原本没有计划发布的代码被发布了 显然它已经被托运到行李箱里了 我想这很好 如你所愿 提早入住 经常入住 然而在这种情况下 它不应该在下一个版本中发布 可以采取什么样的检查 策略 流程来避免代码过早发布 在我看来
  • 使用 Post/Redirect/Get 模式保留模型状态

    目前我正在尝试使用 Spring MVC 3 1 实现 Post Redirect Get 模式 保存和恢复模型数据 验证错误的正确方法是什么 我知道我可以在 POST 方法中使用 RedirectAttributes 保留模型和 Bind
  • Python 在标签正则表达式处分割

    我正在尝试拆分这些行
  • SQL 中的 LIMIT 语句有多通用?

    我正在推广 Django DB 复制应用程序 它使用以下语句 SELECT s FROM s LIMIT 1 获取 1 行并使用 Python DBAPI 来描述字段 它可以在 ORACLE 和 MySQL 中正常工作 但是 LIMIT 语
  • 创建共现矩阵

    我正在尝试解决共现矩阵的问题 我有一个交易和项目的数据文件 我想查看项目一起出现的交易数量的矩阵 我是 R 编程的新手 我很高兴发现 R 拥有的所有快捷方式 而不是创建特定的循环 我几年前曾经使用 C 现在只坚持使用 Excel 宏和 SP
  • H264解析-切片头检测

    我知道在 h264 中我们可以通过位模式检测 NAL 单元0x000001 是否有等效的方法来检测 NAL 单元中的切片标头 如何处理多切片 NAL 单元 目前我正在使用 h264 的解析代码并获取相应结构中的切片标头 切片头语法在第 36
  • 模式匹配 - Prolog 与 Haskell

    这不是一个家庭作业问题 而是一个考试学习指导问题 Prolog 与 Haskell 中的模式匹配有什么区别 我做了一些研究并阅读了它们背后的理论并没有真正让我对两者有一个坚实的理解 我在Prolog中读到 模式匹配是不同的 因为它具有统一变
  • 需要更好的算法来查找 2 组具有最小距离的点之间的映射

    Problem 我有两个重叠的 2D 形状 A 和 B 每个形状具有相同数量的像素 但形状不同 形状的某些部分是重叠的 而每个形状的某些部分是不重叠的 我的目标是将形状 A 中的所有不重叠像素移动到形状 B 中的不重叠像素 由于每个形状中的