我面临将维恩图表示为树结构以将信息处理为XML的问题。
有没有人有这样做的优雅方式,或者可能是一些敏锐的观察?
请注意,我无法处理集合中的单个元素。图表将说明相当于“共有20名学生,其中5名参加体育运动,8名下棋,3名同时参加”的情况。
答案 0 :(得分:1)
根据您的描述,我的理解是您正在讨论处理聚合数据(每组的数量)而不是离散项目。因此,基于这个假设,我将首先看看另一个代码库如何代表Venn Diagrams(Google Chart API)
Google图表API使用七个值代表Venn Diagrams。我从这里提取了以下描述:http://code.google.com/apis/chart/image/docs/gallery/venn_charts.html
- 前三个值指定三个圆的大小:A,B和C.对于只有两个圆的图表,请为第三个值指定零。
- 第四个值指定A和B的交叉点的大小。
- 第五个值指定A和C的交点的大小。对于只有两个圆的图表,请勿在此处指定值。
- 第六个值指定B和C交点的大小。对于只有两个圆的图表,请勿在此处指定值。
- 第七个值指定A,B和C的公共交点的大小。对于只有两个圆的图表,请勿在此处指定值。
我们可以应用相同的方法在XML中表示您的问题域:
<venn_diagram item_type="Students" item_count="20">
<set_a name="Play Sports" item_count="5"/>
<set_b name="Play Chess" item_count="8"/>
<set_a_and_b name="Play Both" item_count="3"/>
</venn_diagram>
有了这些信息,你就足以了解图表。
答案 1 :(得分:1)
正如其他人所说,目前尚不清楚你需要知道什么,但是你提供了一些你必须知道的东西。请注意,维恩图表以类似于布尔语句的析取范式的方式表示数据。也就是说,宇宙是由集合及其赞美之间的交集定义的非交叉集合的并集。例如,对于集A,B和C,您将获得以下计数(其中单引号表示'赞美'):
A B C
A B C'
A B'C
A B'C'
A'B C
A'B C'
A'B'C
A'B'C'
你可能会注意到这些是设置名称的二进制值。所以,基本上,如果你有N套之间的维恩图,你需要知道2 ^ n个计数。从那里,您可以重建您想要的所有信息。 (例如'A'是ABC联盟ABC'联盟AB'C联盟AB'C'的集合)
从那里开始,表示为XML文件只是一个练习 - 您需要知道有多少个集合,它们的名称,以及每个非零交叉点,它们的计数和哪些集合在交集中得到称赞。 (如果需要,可以更明确地存储,但XML已经非常简洁。)
希望这有帮助 - 即使迟到了!