Диаграмма Венна как деревья - PullRequest
4 голосов
/ 19 февраля 2011

Я столкнулся с проблемой представления диаграммы Венна в виде древовидной структуры для обработки информации в виде XML.

У кого-нибудь есть изящный способ сделать это, или, может быть, какие-то острые наблюдения?

Обратите внимание, что я не могу обрабатывать отдельные элементы в наборах.Диаграммы иллюстрируют ситуации, эквивалентные «Всего 20 учеников, из которых 5 занимаются спортом, 8 играют в шахматы и 3 занимаются обоими».

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Как уже отмечали другие, неясно, что вам нужно знать, но вы предоставили кое-что из того, что вы должны знать.Обратите внимание, что диаграммы Венна представляют данные способом, аналогичным дизъюнктивной нормальной форме для логических выражений.То есть юниверс - это объединение непересекающихся множеств, определяемое пересечением множеств и их дополнений.Например, с наборами 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 union ABC 'union AB'C union AB'C')

Оттуда представление в виде XML-файла - всего лишь упражнение - вам нужно знать, сколько наборов, их имя и для каждого ненулевого пересечения их счет и какие множества дополняются в пересечении.(Вы можете хранить более явно, если хотите, но XML уже очень краткий.)

Надеюсь, это поможет - даже если поздно!

1 голос
/ 14 июня 2011

Из вашего описания, насколько я понимаю, вы говорите о работе с агрегированными данными (счет за каждый набор), а не с отдельными элементами. Поэтому, исходя из этого предположения, я сначала посмотрю, как другая кодовая база представляет диаграммы Венна (Google Chart API)

API Google Chart представляет диаграммы Венна с использованием семи значений. Ниже я извлек описания ниже: 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>

С этой информацией вы знаете достаточно, чтобы нарисовать диаграмму.

...