Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 30.04.2019
Сообщений: 89

Расстояния от всех вершин дерева до самой удаленной вершины

27.05.2019, 12:40. Показов 4163. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Задача в вложении.

Решение общего случая очевидно:

1. Сформировать матрицу расстояний (алгоритм Флойда-Уоршелла).
2. Найти максимальное значение для каждой вершины.

Однако в данной задаче ограничение: сложность O(n)

как организовать линейный алгоритм в данном случае?
Миниатюры
Расстояния от всех вершин дерева до самой удаленной вершины  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2019, 12:40
Ответы с готовыми решениями:

Расстояния от первой вершины до всех остальных вершин графа
Дано n вершин и m ребер в неориентированном графе без петель. Длина ребер 1. Выведите растояния от вершины с номером 1 до каждой из n...

Вершины дерева вещественные числа. Описать процедуру, которая вычисляет среднее арифметическое всех вершин
Вершины дерева вещественные числа. Описать процедуру, которая вычисляет среднее арифметическое всех вершин дерева и добавляет в дерево...

Матрица: вывести название самой высокой вершины мира, самой высокой вершины заданной страны
Дан массив данных, в котором хранятся данные о вершинах гор: название, высота, страна местонахождения. Вывести на экран название самой...

11
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,869
27.05.2019, 13:46
Заголовок темы не соответствует задаче во вложении.
1. Не граф, а дерево.
2. Не от данной вершины а от всех.

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

Добавлено через 1 минуту
По пути вниз записываем в каждый узел расстояние до корня. По пути вверх, если надо, обновляем максимальное расстояние до потомка.
0
1 / 1 / 0
Регистрация: 30.04.2019
Сообщений: 89
27.05.2019, 17:32  [ТС]
Shamil1, спасибо за ответ!

Я знаком с алгоритмом поиска в глубину, однако смутно представляю реализацию того, что Вы описали. Интуитивно понятно, что рекурсия как бы проходит в два направления, но как это выглядит на C++ мне трудно представить.

Не могли бы Вы написать хотя бы примерный псевдокод?
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,869
28.05.2019, 11:49
Что-то типа этого:
Code
1
2
3
4
5
6
7
int DFS(vertex v, int depth)
    v.dist_from_root = depth
    v.dist_from_leaf = 0
    for each child in v.children
        int dist_from_leaf = DFS(child, depth + 1)
        v.dist_from_leaf = max(v.dist_from_leaf, dist_from_leaf)
    return v.dist_from_leaf + 1
Не проверял - возможны логические ошибки.
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
28.05.2019, 18:51
Цитата Сообщение от Shamil1 Посмотреть сообщение
Что-то типа этого:
Чет нет.
Да, так можно получить самую удаленную. Но для корня. А спрашивается от i-ой
0
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
28.05.2019, 20:47
самая удаленная от х - это одна из вершин множества {самый глубокий потомок вершины v}, где v - это предок х (в том числе и сам х). судя по ограничению 10000, можно в лоб перебирать для каждой всех ее предков и выбирать максимум.
на всякий случай, скажу, что можно решать за nlogn с помощью, например, smaller-to-larger или centroid decomposition.
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
28.05.2019, 21:19
Цитата Сообщение от salam Посмотреть сообщение
smaller-to-larger
Ссылочку пожалста.
Предложу еще один nlogn
Эйлеров обход + до
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,869
29.05.2019, 11:10
Цитата Сообщение от Ромаха Посмотреть сообщение
Да, так можно получить самую удаленную. Но для корня. А спрашивается от i-ой
В результате работы алгоритма в каждом узле будут записаны два значения - расстояние до корня и расстояние доя самого глубокого листа. Остаётся только выбрать большее из этих чисел.
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
29.05.2019, 12:12
Цитата Сообщение от Shamil1 Посмотреть сообщение
Остаётся только выбрать большее из этих чисел.
Что будет являться ответом только в частном случае
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,869
29.05.2019, 12:25
Цитата Сообщение от Ромаха Посмотреть сообщение
Что будет являться ответом только в частном случае
В каком частном случае?
Ответом будет являться список максимальных расстояний для всех вершин. После работы алгоритма проходим по всем вершинам и выводим большее из двух чисел.

Добавлено через 1 минуту
Ромаха,
Не знаю, обратили ли Вы внимание на это моё сообщение:
Цитата Сообщение от Shamil1 Посмотреть сообщение
Заголовок темы не соответствует задаче во вложении.
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
29.05.2019, 12:32
Цитата Сообщение от Shamil1 Посмотреть сообщение
Ответом будет являться список максимальных расстояний для всех вершин. После работы алгоритма проходим по всем вершинам и выводим большее из двух чисел.
0-1-2-3-4-5
|
6
|
7
|
8

И корень есть 0. Максимальное расстояние для 6 у Вас будет 6-8. А должно быть 6-5
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,869
29.05.2019, 13:25
Цитата Сообщение от Ромаха Посмотреть сообщение
Максимальное расстояние для 6 у Вас будет 6-8. А должно быть 6-5
Возможно, Вы правы. Из условия не понятно, какое расстояние требуется посчитать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2019, 13:25
Помогаю со студенческими работами здесь

Записи вершин дерева - вещественные числа. Описать процедуру, которая выбирает все вершины с отрицательными за
Записи вершин дерева - вещественные числа. Описать процедуру, которая выбирает все вершины с отрицательными записями и строит из них новое...

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

Эффективный алгоритм подсчета расстояний от произвольной вершины до всех стальных вершин в графе
Реализовать в виде программы и исследовать эффективный алгоритм подсчета расстояний от произвольной вершины до всех стальных вершин в...

количество всех вершин данного дерева заданной высоты
Определите функцию, подсчитывающую количество всех вершин данного дерева заданной высоты. Как это сделать?

Вывести значения всех вершин бинарного дерева в инфиксном порядке
Задан указатель на корень непустого бинарного дерева. Вывести значения всех вершин дерева в инфиксном порядке ( вначале выводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru