LINUX.ORG.RU

Как быстро найти узел графа имеющий минимальное расстояние до любого другого?

 ,


0

2

Есть граф каждый узел которого связан с несколькими другими узлами. Из всех узлов нужно выбрать тот расстояние от которого до наиболее удаленного от него узла минимально в сравнении с любым другим узлом. Пробовал простой рекурсивный обход для каждого узла (кроме листьев, очевидно что они не подходят) но на количестве узлов порядка несколько десятков тысяч времени уже занимает порядка нескольких минут на моем компе. Вот думаю как ускорить.

★★

Последнее исправление: mio (всего исправлений: 1)
Ответ на: комментарий от mix_mix

покажешь как?

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

anonymous
()
Ответ на: комментарий от mix_mix

Лол, решается с линейной сложностью, погромист ты наш.

Ты ничего не понимаешь в алгоритмах на графах. Прекрати умничать на ЛОРе.

Waterlaz ★★★★★
()

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

Waterlaz ★★★★★
()
Последнее исправление: Waterlaz (всего исправлений: 1)
Ответ на: комментарий от Waterlaz

Да я, идиот, сдуру решил, что у ОПа дерево, там-то как раз центр отсечением листьев за линейное время находится, но в общем случае с графами это, конечно же, не так.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Да я, идиот, сдуру решил, что у ОПа дерево, там-то как раз центр отсечением листьев за линейное время находится, но в общем случае с графами это, конечно же, не так.

кстати можно найти мин.остовное дерево графа и уже в нём искать центр. Всяко быстрее поиска маршрутов по Дейсктре/Флойду, логарифмическая сложность против степенной.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Для произвольного минимального остовного дерева это утверждение не выполняется:

1-2-3-4
| |
5-6-7

Центр графа - вершина 2, если убрать ребро 2-6, тогда центром получившегося дерева будет вершина 1

anonymous
()

Как правильно пока сказал один человек в треде, это поиск центра: https://en.wikipedia.org/wiki/1-center_problem

Однако по ссылке, что он дал, не предлагают интересного алгоритма. Мол, берите Floyd-Warshall и наслаждайтесь. В общем случае похоже, что так и следует делать. Разве что учесть, что для разного типа графов есть разные подходящие алгоритмы по поиску кратчайших путей всех со всеми (например, Johnson для разреженных).

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

Ищем же min_i(max_j(d(i, j)), где d(i, j) решается Dijkstra'ой. Поэтому много элементов из матрицы расстояний можно будет смело не искать, базируясь на уже рассмотренных элементах. Для вдохновения можешь глянуть минимаксные алгоритмы типа alpha-beta pruning.

anonymous
()
Ответ на: комментарий от anonymous

Да тут много смешных глупостей наговорили все подряд.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.