【发布时间】:2011-09-19 23:06:11
【问题描述】:
我有一个优先级队列,其中包含一个排序矩阵 A 及其在矩阵中的 (row,col) 位置。所以我有一个数据结构“queue_element”,它有三个字段,queue_element.value、queue_element.row 和 queue_element.col
我需要处理优先级队列,对于弹出的每个元素,我需要返回位置 A(row,col) 并消除位于同一 row# 和 col# 上的所有元素。
例如,如果优先级队列的顶部包含 element.value = 0.99、element.row=4 和 element.col=20,那么我需要将 A(4,:) 和 A(:, 20),其中 ':' 表示法代表“全部”或从 0 到结尾的整个范围。这是 MATLAB/Python 表示法,但我为此使用 C++。
我目前正在使用单独的布尔矩阵 P(x,y) 进行消除。对于从优先级队列中弹出的每个 (x,y) 位置,我只需遍历所有行/列,并为位于同一行/列上的所有内容设置一个错误值。然后当我从队列中弹出一个元素时,我只是检查它是否在 P(x,y) 中设置为 false。
但是,这是非常低效的。我的算法的基本情况只需要消除整个行/列。
编辑:很抱歉错过了我的问题的最后一部分......
此算法的更高级版本需要消除同一行/列上的所有内容,但最近的 4 个邻居除外。另一个版本需要在 (row,col) 位置放置 X-Y 网格时消除矩阵右上角和左下象限的所有内容。
我的问题基本上是我是否可以使用明显的数据结构。它必须 a) 允许我有效地“消除”或清零我需要的元素,并且 b) 使我能够非常快速地检查集合成员资格。
关于我应该如何处理的任何想法?
【问题讨论】:
-
你……错过了问题的结尾。
-
嘿,这听起来是个有趣的问题,我们错过了什么?
-
只有穆斯塔法知道,而且他不会说话。我说我们粗暴对待他。
标签: data-structures matrix set