维恩图作为树木

时间:2011-02-19 15:16:31

标签: xml data-structures set

我面临将维恩图表示为树结构以将信息处理为XML的问题。

有没有人有这样做的优雅方式,或者可能是一些敏锐的观察?

请注意,我无法处理集合中的单个元素。图表将说明相当于“共有20名学生,其中5名参加体育运动,8名下棋,3名同时参加”的情况。

2 个答案:

答案 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已经非常简洁。)

希望这有帮助 - 即使迟到了!