用于在具有更新查询的二维矩阵中查找最大值的最佳数据结构
Best data structure for finding maximum in a 2d matrix with update queries
我有一个二重的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)。当矩阵更新时,只有当缓存的位置发生变化时,才需要再次对其进行排序。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 在二维数组中查找第二大元素
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 在二维向量的每一列中查找最大值
- 从二维数组中查找最小值和最大值
- 用于在具有更新查询的二维矩阵中查找最大值的最佳数据结构
- 在二维矢量中查找非支配点
- C++ 在二维映射(映射映射)中查找键匹配项
- 在CGAL中查找两个二维三角形的相交/差的三角化结果
- C++在二维数组中的每一行和每一列中查找最小值和最大值
- 查找二维矩阵中最大 0 的行
- 在二维数组中查找一个值的多个索引
- 查找二维数组中两点之间的距离
- 在二维数组的矩形区域内查找最大值的快速方法
- 在C++中查找二维数组的行数和列数