如何以较低复杂度对数组中相似的元素进行分组?

假设我们有一个包含整数值的矩形数组,如下所示:

A = [[1,1,2,2,2],     [1,2,2,2,1],     [1,3,3,3,1]]

如何将彼此相连的相同整数值分组到不同的集群中?集群大小是未知的。

所需输出(彼此相连的相同整数的不同集群):

组 1 : A[0,0],A[0,1],A[1,0],A[2,0]组 2 : A[0,2],A[0,3],A[0,4],A[1,1],A[1,2],A[1,3]组 3 : A[1,4],A[2,4]组 4 : A[2,1],A[2,2],A[2,3]

进行此操作的最合适算法是什么?是否可以使用机器学习来解决这个问题?


回答:

任何图搜索算法(广度优先搜索深度优先搜索)都可以做到这一点。

图的顶点是矩阵的元素,边存在于相邻的元素之间,因此每个顶点有2到4个邻居。

创建一个同样大小的辅助矩阵,用于存储每个元素所属的集群编号,对于尚未加入任何集群的元素使用其他值(例如-1)。现在,为了获得集群,遍历矩阵中的所有元素。当你发现一个尚未加入任何集群的元素时,从它开始运行BFS或DFS来找到其连接组件中的相同值,并在辅助矩阵中标记这些值为新集群的编号。

复杂度为O(元素数量),与仅仅读取或写入矩阵的复杂度相同。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注