查找“大”集之间的公共子集

时间:2016-06-10 11:43:15

标签: string algorithm substring subset

所以,我有一个包含大约13000多行的文件。每行都有一个由char“;”分隔的目的地列表。我需要在所有目的地列表之间找到所有目的地之间的10个最常见的子集(忽略空集或仅包含1个目的地的集合),以及这些子集在数据上出现的次数:

一个例子可以使这更容易理解:

这将是文件(每个字母代表一个目的地)

A;B;C;D
A;B
A;B;C;D;E
A;B;C;D;E;F;G
A;B;C;D;E;F;G;H;L
C;G;B
K;H

因此,最常见的目的地子集将是:

1. A;B : 5
2. A;C : 4
3. A;D : 4
4. A;B;C : 4
5. A;B;C;D : 4
6. A;E : 3
7. A;B;C;D;E : 3
8. B;C;D;E : 3
9. C;D;E : 3
10. A;B;C;D;E;F : 2

这个问题对我来说似乎很复杂,我认为通过将子集的大小限制为 n (或像3这样的固定数字)来解决它会更容易。

关于如何解决它的任何想法?我想我需要像FPGRowth这样但没有生成关联规则的东西。

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以用一个循环来解决这个问题: 您必须生成一个用于保存结果的hashmap ... 你可以给每个目的地一个唯一的素数,并乘以一行的素数。结果是hashmap的关键。如果密钥不存在,则必须使用值1添加密钥。如果密钥存在,则可以增加该值。这被称为"整数分解"。最后,您必须找到hashmap的最大值。

  

(提示:将目标名称也保存在hashmap的值中,   那么你不必重新计算到目的地的数字)

     

(第二个提示:记住最高的号码和哈希键,所以你没有   在最后搜索最高数字和密钥...)

编辑:对于像A; B; C => A; B和B; C的组合,您可以使用2 for循环来完成这一行