Дан неориентированный граф, имеющий древовидные характеристики. В качестве корневого узла можно выбрать любой узел, задача которого — найти только те узлы, которые минимизируют высоту дерева.
Пример:
На диаграмме ниже все узлы сделаны как корни один за другим, мы можем видеть, что когда 3 и 4 являются корнями, высота дерева минимальна (2), поэтому {3, 4} является нашим ответом.
Мы можем решить эту проблему, сначала подумав об одномерном решении, то есть если дан самый длинный граф, то узел, который минимизирует высоту, будет средним узлом, если общее число узлов нечетным, или средним двумя узлами, если общее число узлов равно четный. Это решение может быть достигнуто следующим подходом: запустите два указателя с обоих концов пути и двигайтесь по одному шагу каждый раз, пока указатели не встретятся или не отойдут на один шаг, в конце указатели будут в тех узлах, которые минимизируют высоту, потому что мы имеем разделить узлы равномерно, чтобы высота была минимальной.
Тот же подход может быть применен и к общему дереву. Начинайте указатели со всех конечных узлов и перемещайте один шаг внутрь каждый раз, продолжая комбинировать указатели, которые перекрываются при движении, в конце только один указатель останется на некоторой вершине, или два указателя останутся на одном расстоянии. Эти узлы представляют корень вершины, которая минимизирует высоту дерева.
Таким образом, мы можем иметь только один корень или максимум два корня для минимальной высоты в зависимости от структуры дерева, как объяснено выше. Для реализации мы не будем использовать фактические указатели, вместо этого мы будем следовать BFS-подобному подходу. При запуске все листовые узлы помещаются в очередь, затем они удаляются из дерева, следующий новый листовой узел помещается в очередь, эта процедура продолжается до у нас есть только 1 или 2 узла в нашем дереве, которые представляют результат.
Поскольку мы обращаемся к каждому узлу один раз, общая временная сложность решения составляет O (n).
|
питон
|
Выход:
3 4
Эта статья предоставлена Уткаршем Триведи . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Приложения задачи минимального остовного дерева
- Алгоритм Борувки для минимального остовного дерева
- Алгоритм минимального остовного дерева Крускала | Жадный Алго-2
- Минимальное остовное дерево Прима (MST) | Жадный Алго-5
- Найти минимальный срез в сети потока
- Найдите минимальную стоимость, чтобы добраться до места назначения на поезде
- Алгоритм Каргера для минимального разреза | Комплект 1 (Введение и реализация)
- Алгоритм Каргера для минимального разреза | Набор 2 (анализ и приложения)
- Проблема Штейнера
- Минимальные шаги, чтобы добраться до места назначения
- Минимальное время, необходимое для гниения всех апельсинов
- Проверьте, представляют ли данные степени вершин график или дерево
- Минимальное связующее дерево Крускала с использованием STL в C ++
- Проверьте, находятся ли два узла на одном пути в дереве
- Нахождение минимального размера покрытия вершины графа с помощью бинарного поиска
0.00 (0%) 0 votes