用于在具有更新查询的二维矩阵中查找最大值的最佳数据结构

Best data structure for finding maximum in a 2d matrix with update queries

本文关键字:二维 查找 数据结构 最佳 最大值 更新 查询 用于      更新时间:2023-10-16

我有一个二重的2d矩阵。我的任务是在任何一点上找到矩阵的最大元素。

查询将有两种类型:

  • 更新查询:在这个查询中,2n-1个元素将被更新,即第i行和第i列的所有元素都将被更新。(我所说的更新是指改变元素,它可以是任何东西,递增或递减)
  • 最大查询:返回2d数组中的最大元素

我提出了一个使用二进制堆的解决方案。我的想法是保持使用数组实现的最大n^2个元素堆,并保持另一个大小为n^2的数组以保持堆元素的索引。因此,矩阵中的第(i,j)个元素,只不过是平面数组中的第i*n+j个元素,将存储与其在堆中的位置相对应的索引。

因此,通过这种方式,2n-1更新将在(2n-1)log(n^2)时间内处理。并且在O(1)时间内可以回答最大查询。

我不能使用STL实现,因为我必须跟踪堆元素,即在更新查询时,我应该知道应该更新哪些堆元素。STL也不支持更改关键帧。

如何提高更新查询时间?是否有其他数据结构可以更快地处理这些操作?

我会使用索引i*n+j的STL向量。使用您自己的比较函数对这个n^2大小的数组进行排序。更新后排序为n^2 O(日志n^2)。查询maximun就是要求向量中的第一个元素。

编辑

如果您只对最大值感兴趣,可以缓存它的位置(i,j)。当矩阵更新时,只有当缓存的位置发生变化时,才需要再次对其进行排序。