【发布时间】:2013-03-06 06:14:28
【问题描述】:
我试图通过比较源图像和图案图像中像素的平均颜色来解决图像匹配问题。我已将此问题简化为子数组求和问题,但无法找到解决方法。
假设我有一个包含所有正整数的二维数组 ARR。我有一个数字 x(这是小图案图像中像素颜色的平均值)。我只需要在 ARR 中找到任何具有确切总和 x 的子数组。我发现了一个类似的问题,可以在这里用动态编程解决。
http://www.geeksforgeeks.org/dynamic-programming-set-27-max-sum-rectangle-in-a-2d-matrix/
但这涉及到找到一个具有最大总和的子数组,而不是已经给出的总和。
所以如果这是给定的数组。 3 4 8 9 3 2 10 4 2 1 8 1 4 8 0 3 5 2 12 3 8 1 1 2 2 如果给定的总和是 19,那么它应该返回这个窗口 3 4 8 9 3 2 10 4 2 1 8 1 4 8 0 3 5 2 12 3 8 1 1 2 2 如果给定的总和是 23,那么它应该返回这个窗口 3 4 8 9 3 2 10 4 2 1 8 1 4 8 0 3 5 2 12 3 8 1 1 2 2我怎样才能有效地找到它?可以在这里使用动态编程吗?请帮帮我。
【问题讨论】:
-
只是为了澄清一下:您是否在寻找任何合适的阵列或所有可能的阵列?子数组的维度或大小重要吗?
-
实际上我需要找出每个可能匹配的数组。我只有一个约束,子数组应该是二维的。不应将单行或单列中的单个元素或元素集视为结果。
-
您的问题的典型规模如何?您的矩阵的典型尺寸是多少?总和有上限吗?这可能很有用,因为矩阵中的所有数字都是正数这一事实意味着矩形维度的乘积必须始终小于总和。如果总和很小,则维度不能太大。
-
当我处理图像时,矩阵的尺寸实际上是测试图像的尺寸。通常低于 3000 X 3000。总和没有任何上限。它只是窗口上每个像素的 rgb 值的总和。
标签: java algorithm multidimensional-array dynamic-programming