Укладка дерева — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
[[Дерево, эквивалентные определения |Дерево]] — планарный граф. Согласно [[Формула Эйлера|следствию из формулы Эйлера]]: для дерева с <tex>N</tex> вершинами <tex>N - 1 \le 3 \cdot N - 6</tex>.
+
[[Дерево, эквивалентные определения |Дерево]] — планарный граф. Его планарность можно подтвердить, предъявив способ укладки для произвольного дерева или же, воспользовавшись [[Теорема_Понтрягина-Куратовского|теоремой Понтрягина-Куратовского]], заметить, что раз этот граф по определению не содержит циклов, значит и подграфов, гомеоморфных <tex>K_{5}</tex> или <tex>K_{3, 3}</tex> содержать не может, а значит он планарен. По формуле Эйлера <tex>V - E + F = 2, V - (V - 1) + F = 2 \Leftrightarrow F = 1 </tex>.
  
 
== Укладка дерева ==
 
== Укладка дерева ==
[[Файл:Layer-graph.jpg|250px|right|thumb|Пример поуровневой укладки дерева]]
+
[[Файл:Layer-graph.jpg|250px|right|thumb|Рисунок 1. Пример поуровневой укладки дерева.]]
 
Существуют несколько способов укладки дерева на плоскости.
 
Существуют несколько способов укладки дерева на плоскости.
 
=== Поуровневая укладка ===
 
=== Поуровневая укладка ===
Простой способ построения нисходящего плоского изображения дерева заключается в использовании его поуровневого расположения, при котором вершины глубины <tex>a</tex> имеют координату <tex>y = – a</tex>, а координаты по горизонтальной оси распределяются так, чтобы никакие левые поддеревья не пересекались с правыми. Возможна реализация за линейное время, позволяющая получить оптимальное по ширине плоское дерево в области размера <tex>O(N^2)</tex> (где <tex>N</tex> — число вершин дерева).  
+
Простой способ построения нисходящего плоского изображения дерева заключается в использовании его поуровневого расположения (''layered drawing''), при котором вершины глубины <tex>a</tex> имеют координату <tex>y = – a</tex>, а координаты по горизонтальной оси распределяются так, чтобы никакие левые поддеревья не пересекались с правыми. Возможна реализация за линейное время, позволяющая получить оптимальное по ширине плоское дерево в области размера <tex>O(N^2)</tex> (где <tex>N</tex> — число вершин дерева).  
 
=== Радиальная поуровневая укладка ===
 
=== Радиальная поуровневая укладка ===
[[Файл:Circle_layered_tree.jpg|250px|right|thumb|Тот же граф, но уложенный радиально]]
+
[[Файл:Circle_layered_tree.jpg|250px|right|thumb|Рисунок 2. Граф из рисунка 1, но уложенный радиально.]]
Радиальная поуровневая укладка дерева отличается тем, что его уровни имеют вид концентрических окружностей, поддеревья занимают секторные сегменты.  
+
Радиальная поуровневая укладка(''radial drawing'') дерева отличается тем, что его уровни имеют вид концентрических окружностей, поддеревья занимают секторные сегменты.  
  
 
Выбор угла <tex>\beta_p</tex> секторного сегмента для поддерева с корнем <tex>p</tex> и количеством вершин <tex>l(p)</tex> определяется следующим образом: пусть вершина <tex>p</tex> лежит на уровне  <tex>C_i</tex>, тогда  для каждого ее сына  <tex>q</tex> имеем: <tex>\beta_q = \min(\frac{l(q)\beta_p}{l(p)}, \tau)</tex>, где <tex>\tau</tex> — это угол области <tex>F_p</tex>, определяемой пересечением касательной к точке <tex>p</tex> уровня <tex>C_i</tex> и окружностью уровня <tex>C_{i+1}</tex>.
 
Выбор угла <tex>\beta_p</tex> секторного сегмента для поддерева с корнем <tex>p</tex> и количеством вершин <tex>l(p)</tex> определяется следующим образом: пусть вершина <tex>p</tex> лежит на уровне  <tex>C_i</tex>, тогда  для каждого ее сына  <tex>q</tex> имеем: <tex>\beta_q = \min(\frac{l(q)\beta_p}{l(p)}, \tau)</tex>, где <tex>\tau</tex> — это угол области <tex>F_p</tex>, определяемой пересечением касательной к точке <tex>p</tex> уровня <tex>C_i</tex> и окружностью уровня <tex>C_{i+1}</tex>.
  
 
Радиальное изображение дерева часто используют для представления свободных деревьев, причем в качестве вершины, размещаемой в центре, берется одна из его центральных вершин.
 
Радиальное изображение дерева часто используют для представления свободных деревьев, причем в качестве вершины, размещаемой в центре, берется одна из его центральных вершин.
[[Файл:Hv_tree.jpg|250px|left|thumb|Пример укладки двоичного дереве в виде hv-изображения]]
+
[[Файл:Hv_tree.jpg|250px|left|thumb|Рисунок 3. Пример укладки двоичного дереве в виде hv-изображения.]]
 
=== hv-изображения ===
 
=== hv-изображения ===
При hv-изображении дерева для каждой вершины <tex>p</tex> выполняются следующие свойства:
+
Бинарные деревья можно изобразить при помощи hv-изображений (''horizontal-vertical drawing''). При этом для каждой вершины <tex>p</tex> выполняются следующие свойства:
* сын вершины <tex>p</tex> ставится в ряд за <tex>p</tex> либо по горизонтали справа, либо по вертикали вниз;
+
* сын вершины <tex>p</tex> ставится в ряд за <tex>p</tex> либо по горизонтали справа, либо по вертикали вниз
* не пересекаются минимальные прямоугольники с горизонтальными и вертикальными вершинами, покрывающие поддеревья вершины <tex>p</tex>.  
+
* два прямоугольника, ограничивающие левое и правое поддерево вершины <tex>p</tex> не пересекаются
 +
<br/>
 +
<br/>
 +
<br/>
 +
<br/>
 +
<br/>
 +
 
 +
<br/>
 +
==Ссылки==
 +
* [http://sydney.edu.au/engineering/it/~shhong/comp5048-lec2.pdf Tree Drawing Algorithms and Tree Visualisation Methods (PDF)]
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Укладки графов ]]
 
[[Категория: Укладки графов ]]

Версия 00:14, 25 декабря 2011

Дерево — планарный граф. Его планарность можно подтвердить, предъявив способ укладки для произвольного дерева или же, воспользовавшись теоремой Понтрягина-Куратовского, заметить, что раз этот граф по определению не содержит циклов, значит и подграфов, гомеоморфных [math]K_{5}[/math] или [math]K_{3, 3}[/math] содержать не может, а значит он планарен. По формуле Эйлера [math]V - E + F = 2, V - (V - 1) + F = 2 \Leftrightarrow F = 1 [/math].

Укладка дерева

Рисунок 1. Пример поуровневой укладки дерева.

Существуют несколько способов укладки дерева на плоскости.

Поуровневая укладка

Простой способ построения нисходящего плоского изображения дерева заключается в использовании его поуровневого расположения (layered drawing), при котором вершины глубины [math]a[/math] имеют координату [math]y = – a[/math], а координаты по горизонтальной оси распределяются так, чтобы никакие левые поддеревья не пересекались с правыми. Возможна реализация за линейное время, позволяющая получить оптимальное по ширине плоское дерево в области размера [math]O(N^2)[/math] (где [math]N[/math] — число вершин дерева).

Радиальная поуровневая укладка

Рисунок 2. Граф из рисунка 1, но уложенный радиально.

Радиальная поуровневая укладка(radial drawing) дерева отличается тем, что его уровни имеют вид концентрических окружностей, поддеревья занимают секторные сегменты.

Выбор угла [math]\beta_p[/math] секторного сегмента для поддерева с корнем [math]p[/math] и количеством вершин [math]l(p)[/math] определяется следующим образом: пусть вершина [math]p[/math] лежит на уровне [math]C_i[/math], тогда для каждого ее сына [math]q[/math] имеем: [math]\beta_q = \min(\frac{l(q)\beta_p}{l(p)}, \tau)[/math], где [math]\tau[/math] — это угол области [math]F_p[/math], определяемой пересечением касательной к точке [math]p[/math] уровня [math]C_i[/math] и окружностью уровня [math]C_{i+1}[/math].

Радиальное изображение дерева часто используют для представления свободных деревьев, причем в качестве вершины, размещаемой в центре, берется одна из его центральных вершин.

Рисунок 3. Пример укладки двоичного дереве в виде hv-изображения.

hv-изображения

Бинарные деревья можно изобразить при помощи hv-изображений (horizontal-vertical drawing). При этом для каждой вершины [math]p[/math] выполняются следующие свойства:

  • сын вершины [math]p[/math] ставится в ряд за [math]p[/math] либо по горизонтали справа, либо по вертикали вниз
  • два прямоугольника, ограничивающие левое и правое поддерево вершины [math]p[/math] не пересекаются







Ссылки