【发布时间】:2017-09-05 17:03:26
【问题描述】:
我有几个对象,每个对象都包含一个字符串列表。
Object 1
["one", "two", "three", "four"]
Object 2
["one", "two", "five", "seven", "eight"]
Object 3
["one", "two", "three", "four", "five", "seven"]
Object 4
["one", "two", "nine", "ten"]
如您所见,字符串是重复的,我的任务是将这些字符串分组并在对象中引用这些组,而不是字符串本身。输出应如下所示:
group1
["one", "two"]
group2
["three", "four"]
group3
["five", "seven"]
group4
["eight"]
group5
["nine", "ten"]
对象将包含对组的引用
Object 1
["group1", "group2"]
Object 2
["group1", "group3", "group4"]
Object 3
["group1", "group2", "group3"]
Object 4
["group1", "group5"]
谢天谢地,这个分组是基于一组静态数据,每个对象由大约 20 个这样的字符串组成。
如果一个字符串出现在两个组中并不重要,但这很好,所以,除非创建这样的组非常容易,否则这不是一个目标。
我以字符串为例简化了我的问题,但在我的文档中,它们是一遍又一遍重复的 JSON 对象。将它们分组并引用这些组的目标,以便不会一次又一次地重复相同的对象。所以,可以说,目标是减少重复。
我知道这是某种 clustering problem,但我无法将这些字符串形式化为 (x,y) 平面中的点。
我该如何处理?这个问题有名字吗?
编辑:经过一番思考,我认为我应该在所有这些列表中找到不相交的字符串集并从那里开始工作。联合查找算法似乎很合适。
【问题讨论】:
-
分组是如何完成的?您使用什么分组标准?
-
分组没有规则。任何字符串都可以分组,但目的是避免重复一堆字符串,而是引用它们的组。比如说,如果我让这 7 个字符串在 4 个对象中重复,而不是写 28 个字符串,我会提到 4 个对象中的一组。 @user3437460
-
我想说聚类分析不是您在这里需要的,因为它主要是一种在 n 维空间中定义类别的统计方法。您正在处理明确定义的群体(似乎),而不是回答有关距离或最佳群体定义的问题
-
@Jim Dennis 我知道这很难推测,但从 OP 试图找到一个精确有序的子序列以进行序列匹配,特别是匹配任何 [c n,..,cn+m] 的一些 [c0,..,cj] 是准确的等于集合 [f0,..,fm]。如果我们将 m 绑定到一个常数(正如 OP 在示例中所做的那样),那么将一个列表与另一个列表进行匹配将在二次时间内完成。
-
@LucasKot-Zaniewski:我同意。如果我们只想搜索有界的序列列表...例如 5、4、3、2 最长胜...那么问题就变得容易处理了。