【发布时间】:2011-02-09 03:53:14
【问题描述】:
我有一个矩形平面网格,每个单元格都分配了一些整数权重。我正在寻找一种算法来识别具有高于平均重量的 3 到 6 个相邻单元格的集群。这些斑点应具有近似圆形的形状。
对于我的情况,不包含集群的单元格的平均权重约为 6,而包含集群的单元格的平均权重约为 6+4,即在 6 左右的某处有一个“背景权重”。权重的波动范围为泊松统计量。
对于小的背景贪婪或种子算法表现得相当好,但如果我的集群单元的权重接近背景波动,即即使没有任何东西,它们也会倾向于找到集群。此外,我无法在所有可能的设置中进行暴力搜索,因为我的网格很大(大约 1000x1000)并且我计划经常这样做(10^9 次)。我的印象是在图论中可能存在解决这个问题的方法。我听说过顶点覆盖和派系,但我不确定如何最好地将我的问题翻译成他们的语言。我知道图论可能在输入的统计性质方面存在问题,但我很想看看那里的算法能找到什么,即使它们无法识别每个集群。
这里是一个裁剪示例:框架区域每个单元格平均有 10 个条目,所有其他单元格平均有 6 个条目。当然,网格会进一步扩展。
| 8| 8| 2| 8| 2| 3|
| 6| 4| 3| 6| 4| 4|
===========
| 8| 3||13| 7| 11|| 7|
|10| 4||10| 12| 3|| 2|
| 5| 6||11| 6| 8||12|
===========
| 9| 4| 0| 2| 8| 7|
【问题讨论】:
-
听起来像是计算机视觉中很久以前解决的问题。例如,试图检测黑暗背景上的暗星。虽然天文学家可能有很多资源,但他们也不介意快速完成。我怀疑你的问题以前已经解决了。顺便说一句,我会坚持使用矩阵数据结构。使用起来更快,而且很有意义。你想做什么?
-
1000x1000 并没有那么多。你可以: A)使用一个好的快速“矩阵”库。 SciPy B) 计算平均“亮度”。 C)从左到右迭代每个单元格,然后从上到下。现在假设正方形 3x3。计算平均密度。看起来平均水平 - 继续前进。看起来比平时高?然后调查该地区。如果您有较大的区域(想想昏暗的星星旁边的天空中的云),这个问题很容易发生。这些云会搞砸一切。必须对数据的外观做出假设。
-
@Hamish:对于“已解决”,我正在寻找一种可靠的方法(很少有误报)。 AFAIK 这可能是一个 NP 难题
-
我计划这样做十亿次。
-
@honk,这甚至不是一个定义明确的问题。你的规格很弱。特别是:什么是“高于平均水平”? 1 个标准差(无论那可能意味着什么)?理论上任何事情都是NP完全问题。像计算机视觉领域的从业者只是接受现实并以最好的方式处理它。你打算做什么10亿次?您需要处理1B“图像”吗?给我们一些关于你正在尝试做的事情的背景。处理实时数据?顺便说一句,小波可能有用,但我不太了解它们。