所以,我有一个包含大约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这样但没有生成关联规则的东西。
谢谢!
答案 0 :(得分:0)
你可以用一个循环来解决这个问题: 您必须生成一个用于保存结果的hashmap ... 你可以给每个目的地一个唯一的素数,并乘以一行的素数。结果是hashmap的关键。如果密钥不存在,则必须使用值1添加密钥。如果密钥存在,则可以增加该值。这被称为"整数分解"。最后,您必须找到hashmap的最大值。
(提示:将目标名称也保存在hashmap的值中, 那么你不必重新计算到目的地的数字)
(第二个提示:记住最高的号码和哈希键,所以你没有 在最后搜索最高数字和密钥...)
编辑:对于像A; B; C => A; B和B; C的组合,您可以使用2 for循环来完成这一行