如何在数组组中找到最常见的n个元素

时间:2019-05-30 18:54:48

标签: php arrays algorithm

我有一个具有约30K属性的数据库。每个属性都有1到200个租户(约10万个租户)。我正在寻找最常见的n个租户分组(其中n通常为3、4或5)。

说n = 3。

Property 1 -<br> 
 Tenants - A, B, C, D, E<br> 
Property 2 - <br> 
 Tenants - A, D, E, F, G<br> 
Property 3 - <br> 
 Tenants - A, B, G, H, I<br> 
Property 4 - <br> 
 Tenants - A, J, K, L, M<br> 

在这种情况下,即使A有4次出现,但3个公共元素的最频繁计数是属性1和2中A,D,E的2个实例。

我不知道从哪里开始将其设置为可重复使用的算法。能比我聪明的人指出正确的方向吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

假设您的数据库定义了属性和租户之间的多对多关系,则可以自联接关系表以获得该结果。这是n = 3的示例。

SELECT p1.tenant, p2.tenant, p3.tenant, COUNT(p1.property) occurrences
FROM property_tenants p1
JOIN property_tenants p2 ON p1.property = p2.property AND p1.tenant < p2.tenant
JOIN property_tenants p3 ON p1.property = p3.property AND p2.tenant < p3.tenant
GROUP BY p1.tenant, p2.tenant, p3.tenant
ORDER BY occurrences DESC

说实话,我真的不知道这对大量数据的效果如何。我可以看到它在逻辑上起作用。