最近我不得不为下面概述的集合问题开发一个朴素的递归算法,但现在想知道问题的正式描述/名称是什么以及是否有一种算法可以更有效地解决问题(我怀疑那里是)。
我知道有单独的算法可以找到相交和不相交,但我还没有认识到任何可以涵盖整个问题的算法。
问题:
获取不确定数量的集合,并为所有集合的每个相交和不相交返回一个集合。
例如,给定 4 个集合作为输入 A、B、C、D:
一个{1,14,2,10,13,12,8,9}
B {2,3,4,15,11,13,9}
C {13,10,4,15,5,6,12,11}
D {7,8,9,13,11,6,12}
结果应该是以下13组:
{1,14},{2},{3},{4,15},{5},{6},{7},{8},{9},{10},{11},{12 },{13}
我开发的算法很幼稚,因为它递归地比较所有集合排列(我希望能够在 XSLT 2.0 中相对容易地实现这一点),直到找不到进一步的相交。
在某些情况下,我需要执行此操作来描述树的多个版本如何在树上的每个点修改原始树。“树”实际上是一个 XML 文档。
[更新] 在接受的答案中显示第一个算法针对 3 个集合运行:{1,2,3},{2,3,4},{2,3,5}
与我原来的 nieve 算法相比,运行了 3 组: