假设我有一个包含n个集合的列表,有没有一种有效的方法来计算r个集合的组合,使得这些集合的交集大于列表中其他r个集合组合的交集?
特别是,我有一个由大约6000个字符串集合组成的列表,并且我想从该列表中选择大约9个集合,以便它们共享所有9个集合组合中最多的字符串。问题在于,如果我强制计算所有组合并查找最大交集,那么将需要(6000个选9个)约3e28次计算,因此我需要更有效的算法或一些可靠的启发式算法。
此外,如果可能的话,我还想扩展这个问题,选择一个变量r,使得任何组合的总元素大小都小于某个任意阈值,而不是选择一个常数r。也就是说,除了从6000个列表中选择9个集合以组成组合之外,该算法将添加字符串集合,直到组合中的字符串总数超过某个阈值,比如40个字符串。
这样做更接近我最初想要做的事情,但我意识到选择9个集合的固定大小会在我使用的列表上有相当不错的效果,并且可能会更容易实现,尽管最好能够实现这种算法。据我所知,这个问题类似于背包问题,尽管我知道解决它的唯一有效方法是使用动态规划,但我不确定在这种情况下如何实现动态规划,因为必须计算运行交集以获取权重,而不能像常规背包一样预先计算权重列表。
特别是,我有一个由大约6000个字符串集合组成的列表,并且我想从该列表中选择大约9个集合,以便它们共享所有9个集合组合中最多的字符串。问题在于,如果我强制计算所有组合并查找最大交集,那么将需要(6000个选9个)约3e28次计算,因此我需要更有效的算法或一些可靠的启发式算法。
此外,如果可能的话,我还想扩展这个问题,选择一个变量r,使得任何组合的总元素大小都小于某个任意阈值,而不是选择一个常数r。也就是说,除了从6000个列表中选择9个集合以组成组合之外,该算法将添加字符串集合,直到组合中的字符串总数超过某个阈值,比如40个字符串。
这样做更接近我最初想要做的事情,但我意识到选择9个集合的固定大小会在我使用的列表上有相当不错的效果,并且可能会更容易实现,尽管最好能够实现这种算法。据我所知,这个问题类似于背包问题,尽管我知道解决它的唯一有效方法是使用动态规划,但我不确定在这种情况下如何实现动态规划,因为必须计算运行交集以获取权重,而不能像常规背包一样预先计算权重列表。