【发布时间】:2013-05-22 18:22:32
【问题描述】:
我需要一个特定的数据结构,但我不确定应该使用什么。
我有一个矩阵 NxN。每个单元格都有一些整数值。对于矩阵中的任何矩形,我需要计算一个“价格”,这样:
price = sum( #value_of_field * #distance_from_target ) over cells in rectangle
距离是曼哈顿距离,目标可以是矩形中的任何单元格。矩阵是固定的(不变的)。
例子:
1 2
1 2
左上为[0;0],左下为[0;1],右上为[1;0],右下为[1;1]
例如,给定矩形 [0;0] - [1;1](整个矩阵)中的 [0;0],价格将是:
price = 1 * 0 + 2 * 1 + 1 * 1 + 2 * 2 = 7
price of price of
[0;0] * [1;0] * ..... ....
distance distance
from [0;0] from [0;0]
我应该如何解决这个问题? m x n(其中 m,n 是矩形的尺寸)的解决方案很容易,但速度很慢。如何加快速度(例如预先计算某些东西)?
【问题讨论】:
-
你有什么问题?你在问什么数据结构,但你已经说过它是一个矩阵。一个二维数组。
-
定义距离。您是否使用曼哈顿距离?此外,矩阵是否固定(不变)且目标始终为 0,0 ?也就是说,对于每个问题实例,你是给定一个目标和一个矩形的边界,还是给定一个目标、一个矩形和一个矩阵?请编辑问题以回答这些问题。
-
@kirelagin 是单元格和目标之间的曼哈顿距离。
-
@SteveWaddicor 是的,但是对于任何矩形来说这都太慢了(O(mn),我需要更快的东西==我想预先计算一些东西
-
@jwpat7 感谢您的意见,我编辑了这个问题。基本上你得到矩阵,然后是矩形。目标可以是矩形中的任何单元格,而不仅仅是 [0;0]