Что такое диаметр дерева

Доказываем корректность поиска диаметра дерева

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

Диаметр дерева — это максимальное расстояние между двумя вершинами в дереве. Алгоритм поиска состоит в двух запусках BFS. Первый идет от произвольной вершины дерева, во время обхода насчитываются расстояния от текущей вершины до всех других. Затем из них выбирается самая удаленная. Из нее делается второй запуск BFS. Насчитываются новые расстояния. Максимальное среди них и будет диаметром.

Почему этот простой с виду алгоритм работает корректно?

Чтобы избежать подводных камней при доказательстве, сразу обговорим случай с деревом из одной вершины и из двух вершин. Если вершина одна, то ребер у нас нет, первый BFS сообщит, что стартовая вершина имеет максимальную глубину, второй — тоже. По сути это и есть так, алгоритм сработает верно. Если имеется две вершины, то первый обход придет во вторую вершину, а второй — в стартовую, что корректно для данного случая.

Сначала поймем, что искомое расстояние — расстояние между двумя листами. На самом деле, пусть вершина на конце найденного максимального путь не является листом. Одновременно мы не можем увеличить искомое расстояние по предположению. Тем не менее, это означает, что BFS не посетил вершины, «расположенные за» текущей, что противоречит корректности BFS. Получается, что обе найденные вершины будут листьями. Прекрасно.

Подвесим наше дерево за вершину v, из которой запускаем первый обход.

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

Пусть мы нашли диаметр и две вершины, ему соответствующие. Найдем LCA этих вершин a и b, назовем эту вершину c. Очевидно, что D = d[a,c] + d[c,b]. Фактически диаметр это сумма двух наиболее глубоких поддеревьев некоторой вершины, если она принадлежит длиннейшему пути. Диаметр дерева — это максимальный диаметр среди всех поддеревьев. Первый обход в ширину даст нам максимальную по глубине вершину (так как мы подвесили за стартовую вершину). Обозначим вершину на конце найденного пути w. Докажем, что w будет принадлежать искомому длиннейшему пути. Пусть диаметр «перегибается» в вершине c(он будет «перегибаться», так как соединяет два листа, а дерево подвешено за вершину v, не являющуюся листом). Пускай вершина w принадлежит одному из поддеревьев вершины c. Тогда просто заменим некоторую часть пути (c, x), где x — один из концов, на (c, w). d[c,x] d[x,c]. d[w,e] > d[y,e] > d[y,c]. Поэтому D0 = d[x,c] + d[y,c] d[a,w] по предположению;
В итоге получаем противоречие. Поэтому вершина w обладает наибольшей глубиной в любом поддереве.

Получаем, что вершина w принадлежит диаметру, а также является одним из его концов. Тогда очевидно, что остается лишь найти наиболее удаленную от w вершину, что и делает второй BFS.

Источник

Определение диаметра и высоты дерева

Что такое диаметр дерева. Смотреть фото Что такое диаметр дерева. Смотреть картинку Что такое диаметр дерева. Картинка про Что такое диаметр дерева. Фото Что такое диаметр дерева

Рисунок А. Измерение диаметра дерева

Рисунок Б. Измерение высоты дерева высотомером и мерной вилкой.

Что такое диаметр дерева. Смотреть фото Что такое диаметр дерева. Смотреть картинку Что такое диаметр дерева. Картинка про Что такое диаметр дерева. Фото Что такое диаметр дерева

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

Пример практической работы по определению высоты и диаметра.

Задание. Определение объема растущего дерева.

Цель. Научиться определять высоту и диаметр дерева, а также площадь поперечного сечения и объём ствола.

Оборудование. Высотомер, мерная вилка, приспособле­ния для измерения высоты дерева, рулетка, рабочая тетрадь, справочник таксатора или лесничего.

1.Работа проводится во взрослом насаждении пришкольного участка или (при отсутствии такого насаждения) в окрестностях школы.

В нём подбирается де­рево, объем которого необходимо определить.

2.В рабочей тетради опишите окружающую дерево обстановку.

3.Подготовьте мерную вилку к работе. При отсутствии на мерной вилке разметки для определения высоты их можно сделать самостоятельно:

а) найти на конце неподвижной стойки (5—8 см от конца) небольшое от­верстие,

б) на подвижной ножке напротив отверстия провести черту с обозначением нуля,

в) нанести в обе стороны от нулевого штри­ха сантиметровые де­ления. С левой стороны от ну­ля штрихи наносятся с наклоном влево, а с правой стороны — с наклоном вправо.

г)закрепить нить с отвесом в отвер­стии неподвижной стойки.

4.Определите высоту дере­ва мерной вилкой и высотоме­ром (технология описана в пособии)

5. С помощью мерной вилки измерьте диаметр ствола на вы­соте груди (не допускайте ошибок). При измерениях длины, диаметра допустимы погрешности в пределах ±10% при учете запасов леса на корню. Если погрешности превышают установ­ленные нормы, то они считаются грубыми ошибками.

6. Вычислите площадь поперечного сечения по величи­не этого диаметра, используя формулу:

Что такое диаметр дерева. Смотреть фото Что такое диаметр дерева. Смотреть картинку Что такое диаметр дерева. Картинка про Что такое диаметр дерева. Фото Что такое диаметр деревагде g — площадь сечения, м 2 ; d — диаметр, м.

7.Вычислите объем ствола исследуемого вами дерева по формуле:

Что такое диаметр дерева. Смотреть фото Что такое диаметр дерева. Смотреть картинку Что такое диаметр дерева. Картинка про Что такое диаметр дерева. Фото Что такое диаметр деревагде h — высота (длина) ствола, м.

Источник

Диаметр дерева с использованием DFS

Диаметр дерева (иногда его называют шириной) — это количество узлов на самом длинном пути между двумя листьями в дереве. На диаграмме ниже показаны два дерева, каждое из которых имеет диаметр пять, листья, которые образуют концы самого длинного пути, заштрихованы (обратите внимание, что в каждом дереве длиной пять более одного пути, но нет пути длиннее пяти узлов)
Что такое диаметр дерева. Смотреть фото Что такое диаметр дерева. Смотреть картинку Что такое диаметр дерева. Картинка про Что такое диаметр дерева. Фото Что такое диаметр дерева

Мы обсудили решение в посте ниже

В этом посте обсуждается другое решение на основе DFS. После наблюдения над деревом мы видим, что самый длинный путь всегда будет проходить между двумя листовыми узлами. Мы запускаем DFS со случайного узла и затем видим, какой узел находится дальше всего от него. Пусть самый дальний узел будет X. Понятно, что X всегда будет листовым узлом и углом DFS. Теперь, если мы запустим DFS из X и проверим самый дальний узел из него, мы получим диаметр дерева.
Реализация C ++ использует представление списка смежности графов. Контейнер списка STL используется для хранения списков соседних узлов.

using namespace std;

// Используется для отслеживания самого дальнего узла.

// Устанавливает maxCount как максимальное расстояние от узла.

void dfsUtil( int node, int count, bool visited[],

int & maxCount, list int >* adj)

if (count >= maxCount) <

dfsUtil(*i, count, visited, maxCount, adj);

// Функция для обхода DFS. Он использует рекурсивный
// dfsUtil ()

void dfs( int node, int n, list int >* adj, int & maxCount)

// Пометить все вершины как не посещенные

// Увеличить счетчик на 1 для посещаемого узла

dfsUtil(node, count + 1, visited, maxCount, adj);

// Возвращает диаметр представленного двоичного дерева
// как список смежности.

int diameter(list int >* adj, int n)

int maxCount = INT_MIN;

/ * DFS из случайного узла, а затем посмотреть

самый дальний узел X от него * /

dfs(1, n, adj, maxCount);

/ * DFS от X и проверить самый дальний узел

dfs(x, n, adj, maxCount);

/ * Программа драйвера для проверки вышеуказанных функций * /

list int >* adj = new list int >[n + 1];

/ * создать ненаправленные ребра * /

/ * maxCount будет иметь диаметр дерева * /

cout «Diameter of the given tree is «

// Java-программа для определения диаметра
// двоичное дерево с использованием DFS.

public class Diametre_tree <

// Используется для отслеживания самого дальнего узла.

static int maxCount;

// Устанавливает maxCount как максимальное расстояние

static void dfsUtil( int node, int count,

if (count >= maxCount) <

dfsUtil(i, count, visited, adj);

// Функция для обхода DFS. Оно использует

static void dfs( int node, int n, List

boolean [] visited = new boolean [n + 1 ];

// Пометить все вершины как не посещенные

// Увеличить счетчик на 1 для посещаемого узла

// Возвращает диаметр представленного двоичного дерева

// как список смежности.

static int diameter(List adj[], int n)

/ * DFS из случайного узла, а затем посмотреть

самый дальний узел X от него * /

/ * DFS от X и проверить самый дальний узел

/ * Программа драйвера для проверки вышеуказанных функций * /

public static void main(String args[])

for ( int i = 0 ; i 1 ; i++)

adj[i] = new ArrayList ();

/ * создать ненаправленные ребра * /

/ * maxCount будет иметь диаметр дерева * /

System.out.println( «Diameter of the given » +

«tree is » + diameter(adj, n));

>
// Этот код предоставлен Sumit Ghosh

// C # программа для определения диаметра
// двоичное дерево с использованием DFS.

// Используется для отслеживания самого дальнего узла.

static int maxCount;

static List int > []adj;

// Устанавливает maxCount как максимальное расстояние

static void dfsUtil( int node, int count,

List int > l = adj[node];

foreach ( int i in l)

if (count >= maxCount)

dfsUtil(i, count, visited, adj);

// Функция для обхода DFS. Оно использует

static void dfs( int node, int n,

bool [] visited = new bool [n + 1];

// Увеличить счетчик на 1 для посещаемого узла

dfsUtil(node, count + 1, visited, adj);

// Возвращает диаметр представленного двоичного дерева

// как список смежности.

static int diameter(List int > []adj, int n)

/ * DFS из случайного узла, а затем посмотреть

самый дальний узел X от него * /

/ * DFS от X и проверить самый дальний узел

public static void Main(String []args)

adj = new List int >[n + 1];

adj[i] = new List int >();

/ * создать ненаправленные ребра * /

/ * maxCount будет иметь диаметр дерева * /

Console.WriteLine( «Diameter of the given » +

«tree is » + diameter(adj, n));

// Этот код предоставлен PrinciRaj1992

Выход:

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Источник

Электронная библиотека

Утверждение. Если для двух вершин существует маршрут, связывающий их, то обязательно найдется минимальный маршрут, соединяющий эти вершины. Обозначим длину этого маршрута через d(v, w).

Определение. Величину d(v, w) (конечную или бесконечную) будем называть расстоянием между вершинами v, w. Это расстояние удовлетворяет аксиомам метрики:

Определение. Диаметром связного графа называется максимально возможное расстояние между двумя его вершинами.

Определение. Центром графа называется такая вершина, что максимальное расстояние между ней и любой другой вершиной является наименьшим из всех возможных; это расстояние называется радиусом графа.

Для графа G, изображенного на рис. 3.16, найти радиус, диаметр и центры.

Рис. 3.16. Граф для примера 82

Чтобы определить центры, радиус, диаметр графа G, найдем матрицу D(G) расстояний между вершинами графа, элементами dij которой будут расстояния между вершинами vi и vj. Для этого воспользуемся графическим представлением графа. Заметим, что матрица D(G) симметрична относительно главной диагонали.

С помощью полученной матрицы для каждой вершины графа G определим наибольшее удаление из выражения: для i, j = 1, 2, …, 5. В результате получаем: r(v1) = 3, r(v2) = 2, r(v3) = 2, r(v4) = 2, r(v5) = 3. Минимальное из полученных чисел является радиусом графа G, максимальное – диаметром графа G. Значит, R(G) = 2 и D(G) = 3, центрами являются вершины v2, v3, v4.

Срочно?
Закажи у профессионала, через форму заявки
8 (800) 100-77-13 с 7.00 до 22.00

Источник

Диаметр дерева

в коре между двумя параллельными касательными.

Смотреть что такое «Диаметр дерева» в других словарях:

Диаметр на высоте груди — диаметр растущего дерева на высоте 1,3 м от шейки корня … Краткий словарь основных лесоводственно-экономических терминов

Максимальная продолжительность жизни — Максимальная продолжительность жизни согласно классическому определению, максимальная возможная продолжительность жизни представителей определённой группы организмов. В связи со сложностью определения, на практике, это максимальная… … Википедия

Лесопильное производство — Вследствие значительного богатства многих местностей России лесными материалами лесопильное дело является одним из самых распространенных промыслов, занимающим большое число рук и оказывающим экономическое влияние на жизнь народа. По мнению проф … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

ДЕРЕВО — многолетнее растение с одревесневающим прямостоячим главным стеблем стволом. Более детальное или четкое определение этой жизненной форме дать трудно из за разнообразия размеров и внешнего вида растений, которые называют деревьями. Даже банан,… … Энциклопедия Кольера

Дерево — деревянистое растение с очищенным от сучьев в нижней части стволом и кроной, или вершиной, образуемой из сучьев и ветвей в верхней части. Д. служит предметом садового, паркового и лесного хозяйства, причем сообразно с тем изменяется и уход за ним … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

Дерево, материал — 1) Технические свойства. Техническими свойствами древесины должны быть называемы такие, от которых зависит большая или меньшая пригодность дерева для различных применений его в технике. Здесь будут рассмотрены важнейшие из таких свойств древесины … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

Пиротехния* — (Feuerwerkerei, pyrotechnie, pyrotechnics) искусство приготовления различных горючих и взрывчатых составов и сожигания их с целью достижения того или другого определенного эффекта. П. делится на: 1) военную П., приготовляющую изделия, которые… … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

Пиротехния — (Feuerwerkerei, pyrotechnie, pyrotechnics) искусство приготовления различных горючих и взрывчатых составов и сожигания их с целью достижения того или другого определенного эффекта. П. делится на: 1) военную П., приготовляющую изделия, которые… … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *