【发布时间】:2016-05-12 22:35:15
【问题描述】:
我正在研究根据 SERP 中相同网址的数量对来自搜索引擎的关键字进行分组的算法。每组代表一个url,每个值是url出现的SERP关键字的id。
我有组列表:
groups = [
[1],
[1, 2 ,3],
[1, 2, 3, 4, 5],
[1, 2, 3 ,4],
[2, 3],
[4, 5, 6],
[4, 5, 7]
]
我需要获取至少出现在 N 个组中的 ALL 组项目,按“大小”减小的顺序排列:
在上面 N=3 的示例中,我们有两个子集: [1, 2 ,3] 和 [4, 5]
我知道如何获取它:
迭代 1: 找到至少出现 3 次的最大集合(它是 [1, 2 ,3])并从所有集合中删除它出现的位置。
迭代后我们有:
groups = [
[1],
[4, 5],
[4],
[2, 3],
[4, 5, 6],
[4, 5, 7]
]
迭代 2: 找到至少出现 3 次的最大值(它是 [4, 5])
迭代后我们有:
groups = [
[1],
[4],
[2, 3],
[6],
[7]
]
算法结束:因为没有更多的集合在组中出现至少 3 次。
您对获取它们的算法有任何想法吗?
N 介于 1 和 10 之间。
附言组列表很大,从 1000 到 10000 项。 Numbers 是 db 中对象的 id。
【问题讨论】:
-
为什么 [1, 2, 3] 是一个组,而不是 [1], [1, 2] 或 [1, 2, 3, 4] ?
-
措辞不当。目前尚不清楚问题是什么。更精确地定义组约束。虽然我想我明白了,但它会有很大帮助。
-
@mcmlxxxvi,再看看问题。
-
为什么
[4, 5]是一个组,而[2, 3]不是? -
好吧,列表多达 10000 套,
N高达 10,我的 itertools 想法可能已经落伍了。二项式系数C(10000,10)大约为 2.7 x 10**33。将 10 个组的所有集合相交的蛮力方法行不通。所有组的联合有多大? (在您的示例中,它有 7 个项目)。如果这个数字与组的数量相比很小(如果有很多重复,就会出现这种情况)如果有一些可行的想法。