Изменения

Перейти к: навигация, поиск

Алгоритм Фараха

33 байта добавлено, 12:51, 14 июня 2014
Шаг 5: удаление двойных дуг
[[Файл:Tree101232merged.png|500px]]
 '''Рис. 7 откорректированное дерево'''
[[Файл:Treestep5_1.jpg|550px]]
 '''Рис. 8 пример'''
Для того чтобы узнать общее начало двойной дуги, нужно взять одну чётную и одну нечётную вершину на дереве, для которых родителем является конец нашей двойной дуги. Например, на рисунке выше двойная дуга <tex>(1)</tex> (конец помечен зелёным) является общим родителем для вершин <tex>3</tex> и <tex>6</tex>. Чтобы узнать, на каком расстоянии будет расслаиваться двойная дуга, надо увеличить номера вершин на единицу и найти их родителя. Он будет находиться на единицу ближе к корню (и путь у вершин будет одинаковой строкой, не считая размера). Родитель вершин <tex>4</tex> и <tex>7</tex> помечен жёлтым, он находится на расстоянии <tex>1</tex> от корня, следовательно, дуга <tex>(1)</tex> должна расслаиваться в двух символах от корня, то есть обе дуги совпадают и их просто надо слить.
[[Файл:Treestep5_2.jpg|650px]]
 '''Рис. 9 итоговое дерево'''
Дерево строится рекурсивно, каждый раз длина строки уменьшается в два раза, а все фазы работают линейно.
497
правок

Навигация