【发布时间】:2009-10-07 09:35:59
【问题描述】:
我正在编写一个简单的游戏,它将数据集存储在 2D 网格中(如棋盘)。网格中的每个单元格可能包含一个整数(0 表示单元格为空)。如果单元格包含一个大于 0 的数字,则称其为“已填充”。网格上的一组“填充”单元称为“配置”。
我的问题是能够“识别”特定的配置,而不管单元格的配置在 MxN 网格中的什么位置。
这个问题(在我看来),分解为以下 2 个子问题:
以某种方式“规范化”配置的位置(例如,将其位置“重新定位”为 (0,0),这样包含配置中所有单元格的最小矩形的左顶点位于 (0,0 ) 在 MxN 网格中
计算某种相似性度量(或者可能只是设置差异?),以确定当前“标准化”配置是否是已知配置之一(即“已识别”)
我怀疑我将需要使用 std::set (迄今为止,我作为 C++ 编码员这么多年没有使用过的少数 STL 容器之一!)。我将不胜感激之前解决过此类问题的任何人的任何想法/提示。任何代码 sn-ps、伪代码和/或链接都会非常有用。
【问题讨论】:
-
你想要达到的目标让我想到了 HashLife,一种用于计算元胞自动机的记忆算法。它使用四叉树表示网格,并将计算的配置存储到哈希图中,以避免多次执行相同的计算。
-
您的问题未完全说明 - 当您希望识别一个 blob 时,板上是否有其他已归档的单元格与 blob 分开?您还谈到“相似性”——但您是在精确模式匹配还是近似模式匹配?
-
Mick:它不是我想要识别的 blob,它是网格上的整个 blob 集(即“配置”)关于相似度度量 - 相似度度量也适用于两个精确匹配作为那些仅仅“相似”的 - 通过返回适当的信息(例如,它与识别的配置有何不同)与已知配置
-
这个问题的标题里面几乎没有信息。如果您使用描述的第二段作为标题,则更能激励人们阅读和回答问题。比如:“我如何'识别' MxN 网格中的单元格配置?”这个问题的标题要好得多。
标签: c++ matrix pattern-matching set