【问题标题】:efficient way for finding min value on each given region在每个给定区域上查找最小值的有效方法
【发布时间】:2012-08-30 07:11:57
【问题描述】:

给定一个 我们先定义两个实值函数和如下:


我们还为每个矩阵X 定义了一个值m(X),如下所示:

现在给定一个,我们有很多G的区域,表示为。这里,G 的区域由G 的子矩阵构成,该子矩阵是从G 的一些列和一些行中随机选择的。我们的问题是计算 尽可能少的操作。是否有任何方法,例如构建哈希表或排序以更快地获得结果?谢谢!

==========================

例如,如果G={{1,2,3},{4,5,6},{7,8,9}},那么

G_1 could be {{1,2},{7,8}}
G_2 could be {{1,3},{4,6},{7,9}}
G_3 could be {{5,6},{8,9}}

=========================

目前,对于每个 G_i,我们需要 mxn 比较来计算 m(G_i)。因此,对于m(G_1),...,m(G_r),应该有 rxmxn 比较。但是,我可以注意到G_iG_j 可能重叠,所以会有一些其他更有效的方法。任何关注将不胜感激!

【问题讨论】:

  • 编辑您的问题以提高可读性,否则我们不会阅读。
  • 我为他编辑过。
  • Gs 是如何表示的?给定Gi,它具有X 的哪些行和哪些列是否很明显?例如,Gi 的表示是否说:“Gi 是 X 的第 2、5、7 行和第 1、6 列”?
  • @David:太糟糕了,你不能因为这样的惊人编辑而获得声誉。真正帮助社区。​​span>
  • 所以真正的问题是,为什么我们不能在这里拥有与 math.stackexchange 相同的功能?

标签: performance algorithm optimization hash matrix


【解决方案1】:

根据需要最小/最大类型数据的次数,您可以考虑在矩阵值之间(即值之间的空隙中)保存最小/最大信息的矩阵。因此,对于您的示例 G= {{1,2,3},{4,5,6},{7,8,9}} 我们将定义一个关系矩阵 R,其大小为 ((mxn),(mxn),(mxn)),其值来自集合 C = {-1 = 小于,0 = 等于,1 = 大于}。

R 将有九个关系对 (n,1)、(n,2) 到 (n,9),其中每个值都是 C 的成员。注意 (n,n 已定义并且等于 0)。因此,R[4,,) = (1,1,1,0,-1,-1,-1,-1,-1)。现在考虑您的任何子集 G_1 ...,了解子集成员的位置关系将为您提供到 R 的偏移量,这将解析为每个 R(N,,) 的索引,这将直接返回所需的关系信息而无需比较。

当然,您必须确定构建 R 的空间和计算开销是否超过了每次需要时计算所需内容的成本。某些优化包括实现 R 矩阵沿主对角线反射并且您可以声明“等于”被调用,例如,小于(意味着 C 只有两个值)是可用的。根据原始矩阵 G,如果知道行或列已排序,则可以进行其他优化。

并且由于某些计算机(大型机、超级计算机等)以列优先顺序将数据存储到 RAM 中,因此请存储您的数据集,以便它填充转置的行和列,从而允许列到列类型的操作(向量计算) 来实际支持这些列。检查您的架构。

【讨论】:

  • 最后一个想法,C++ 用于这种数学?这不是更现代的矢量化管道 FORTRAN 问题吗?
  • @Wes Miller,有现代矢量化管道 FORTRAN 问题的参考吗?
  • 可悲的是,@JohnSmith 这是 1684 年研究生课程的一段记忆片段,当时 Cray 和 CDC 卖得像个重磅炸弹。我怀疑那里还有这样的机器,但我还没有真正寻找它们。
猜你喜欢
  • 2013-11-01
  • 1970-01-01
  • 2018-01-06
  • 2013-12-05
  • 2015-05-22
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多