2013-07-03 49 views
3

什么将是一个很好的算法来搜索数据的二维数组和围绕同一类数据创建边界?数据将是随机的,因此除了它将包含数值之外,不会有任何关于可用数据的事先知识。二维模式搜索

否则有没有关于这个问题的好文章/书籍?

编辑

这里是我想要达到一个例子:

enter image description here

与同为两个的

+0

也许您正在寻找围绕您的数据绘制凸包?那里有很多算法(见维基百科)。 – Yellow

+0

听起来像是你想要的linq.groupby – Sayse

+0

你能否提供一个小的2d数组示例?否则,有很多适合的算法。 – Regenschein

回答

3

广度优先搜索可以帮助你here.First构造图ģ如下:

格拉夫ģ具有边缘(U,V)是且仅当第u细胞的值=第v个单元的值。

然后执行BFS给出您可以方便地标记为使用单元格的值访问的图形的很好的部分。

1

这是一个复杂的问题,我认为相当于找到一组点的凹包。

您首先必须为数据点定义相等操作,以便您可以确定“相同排序”数据点的集合。

以这种方式确定了一组点后,您需要找到该组点的凹壳。

(我假设你想要凹型船体而不是convex hull)。

寻找凹形凹陷是一项不平凡的任务。

看到这里的细节:https://gis.stackexchange.com/questions/1200/concave-hull-definition-algorithms-and-practical-solutions

如果它实际上是你想要的凸包,在这里看到的C#实现:

http://miconvexhull.codeplex.com/

+0

这确实是一个非常好的建议。原始文章的编辑之后,似乎发现凹形壳体确实是这里所必需的。但是,如果如图所示,输入实际上只是一个二维数组,它可能比这更简单,而且(非几何)搜索算法可能会这样做。 – Yellow

+0

在凹包的定义中,您需要在多边形上定义一些类型的限制(否则,通过连接每个点的直线来实现0的最小区域)。 – Teepeemm

0

一个天真的解决方案(将工作的优良小数据集)是定义一个比较运算符,它接受两个参数,如果相等则返回true,否则返回false,然后比较所有相邻值(水平和垂直)并在比较返回false时绘制边界。

+0

不幸的是,这是针对相当大的数据集。 – Alex

+0

多大?你多久需要做一次这种计算?即使对于数百万个数据点来说,这也将是非常快的,所以除非你有数十亿的数据,并且需要实时做到这一点,否则就没关系。 – PeterK