我很抱歉,如果这已经在其他地方得到了回答,但我还没有找到它使用我有限的算法术语。;)
我的情况是这样的-我有一个可变数量的数据元素,每一个数据元素都经过了相互测试以确定兼容性相容性存储在相当于二维数组(真值表?)。我的目标是生成这些数据元素的所有可能组合,其中组合中的每个元素都与其他元素兼容。
例如,如果元素1(共4个)与元素2和4兼容,元素2与元素1、3和4兼容,元素3与元素2兼容,元素4与元素1和2兼容,则我的真值表将类似于:
1){1,1,0,1}
2){1,1,1,1}
3){0,1,1,0}
4){1,1,0,1}
我想要的组合是:
1,2,4个
1,2个
1,4个

2,3个
2,4个
2个


我的方法在很多情况下都能很好地工作,但是有时当元素的数量超过5000时,根据数据集的不同,我的方法会陷入困境。我的第二个挑战是确定将执行时间从5秒提高到3小时的模式。。。
从布尔数组的角度来看,我觉得一定有一个更简单的解决方案——也许是一个以某人命名的算法你可以从上面推断出,我不一定知道怎么问这个问题;)
谢谢你的时间!

最佳答案

我认为你所拥有的是一个“邻接矩阵”而不是一个真值表,你正在寻找图的所有“完全连通子图”,其中邻接矩阵是一个表示如果内存可用,完全连接的子图也被称为“团”。我不太清楚你在找什么,因为前面的一个回答者说你的话和你的矩阵有一些出入。
在这些条款上做些谷歌搜索;现在在这里,我已经太晚了,不能从我的头脑或我的图书馆里挖掘这些东西。
注意,图是对称的,也就是说,如果“1与2兼容”,那么“2必然与1兼容”。现在,这已经减少了一半的数据存储需求(使它们更加复杂,存储矩阵的上半部分或下半部分往往比它节省的空间更令人费解)。我认为你应该在主对角线上有1,来表达“1与1兼容”的观点最后,我怀疑,你会有一些元素,它们只与自己兼容。
遗憾的是,在图中查找团是np,但是对于只有5000x5000个元素的矩阵,在编译语言中使用蛮力天真算法不应该花费太长时间。
当做
作记号

关于algorithm - 基于大型真值表生成所有组合的算法方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1302794/

10-12 06:06