给定一个字母数字元素的无限集/ Universe(U)和(U)子集的族(F)。
计算/分组(F)中所有相关子集,其中所有元素都被覆盖或更少,参见示例。
宇宙不是无限的,而是非常大,大约59Mil元素并且在不断增长。族(F)子集也不是常数,大约13Mil元素并且也在增长。
示例:
U = {9b3745e9
,ab70de17
,1c410139
,44038bbf
,9c610bb
,...,N}
F1 = {9b3745e9
,07ee0220}
F2 = {9b3745e9
,ab70de17
,99b5d738}
F3 = {99b5d738,07ee0220}
F4 = {9b3745e9
,ab70de17
,1c410139
}
F4 <子>计算()子> = {F2(2),F1(1)}
原因你可以在残酷的迭代中做到,但随着时间的推移,它不是最佳解决方案(NP完全问题)。
任何想法如何更有效地解决这个问题?编码子集,同时使用大于Universe的元素/向量码本,例如70Mil或100Mil。但我不确定计算。
答案 0 :(得分:0)
似乎基于示例“相关”子集是包含至少一个公共元素的子集。在该示例中,F4具有两个共享元素,0x9b3746e9(与F1共享)以及与F2共享的0xab70de17和0x9b3746e9。括号中的数字表示共享元素的数量(F2(2)= 2个共享元素与F2)。假设这个解释:
这显然不是NP-complete 问题,但索引的简单情况。 在哈希表中,链接每个元素 U(59 * 10 6 )列表 包含它们的子集(例如 0x9b3746e9 - &gt; {F1,F2,F4})。什么时候 找到给定的相关子集 子集,遍历元素 在子集中的U,并查找 每个元素的哈希表。重复 通过列表,你找到了 相关子集。这是一个快速 操作,什么也没有 NP-complete in。
然而,问题的另一种解释是这是SET COVER组合优化问题的一个实例。这确实是NP完全的。