首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求最佳x指数的算法,使每个象限中的点和最小。

求最佳x指数的算法,使每个象限中的点和最小。
EN

Stack Overflow用户
提问于 2016-12-08 23:32:57
回答 1查看 235关注 0票数 2

我有一个包含各种数据点的2D数组。参考图1,我需要把它分成4个象限,这样每个象限内的所有点的和都被最小化了。每个象限的最小大小是4x4,它可以大但不小,它不一定是一个正方形。例如,最优象限的大小可以是5x3。

我需要找到最优指数x和y,这将导致象限,其中最小和。

我看到的是重量分配问题。我可以把所有的值加到我的2D数组中,得到和,S,现在,我需要在4个象限上大致相等地分配这个和S。我知道我已经提到,每个象限的和必须是最小可能,但它更像是平衡最小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 02:52:44

您可以使用总和面积表有效地对每个象限中的值进行求和。这是一个矩阵,其维数与矩阵相同,其中table[i][j]是原始矩阵中从0行到i行和0到j列之间的所有元素的总和。

您可以这样计算它(伪代码):

代码语言:javascript
复制
for i = 0 to rows
    row_sum = 0
    for j = 0 to columns
        row_sum += matrix[i][j]
        table[i][j] = row_sum
        if i > 0
            table[i][j] += table[i-1][j]

上面的代码在每一行中保持运行和,并将其添加到同一列上一行的表项中。

然后,您可以使用这个表来计算给定分割的每个象限的值。假设您想要在第一行之后水平划分为象限,在第j列之后垂直分割成象限,象限如下所示:

代码语言:javascript
复制
a | b
--+--
c | d

你可以像这样计算象限和:

代码语言:javascript
复制
a = table[i][j]
b = table[i][columns-1] - a
c = table[rows-1][j] - a
d = table[rows-1][columns-1] - (a + b + c)

因此,您可以迭代矩阵,并计算每个可能的分裂位置的象限和使用4个表查找和一些简单的加减。跟踪最优(根据你的标准,例如最小象限和最大值之间的最小差),这就是你的答案。

它是矩阵中元素数的O(n)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41050703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档