Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Теория графов

Автор RawonaM, июня 7, 2011, 19:36

0 Пользователи и 1 гость просматривают эту тему.

GaLL

Цитата: RawonaM от декабря  9, 2011, 21:55
Тут в книге задача, не пойму каким образом она относится к теме.
Напрямую же. :)

Цитировать
Допустим дан некий связной граф G. Определим граф H так: вершины будут составлять все остовные деревья графа G, а две вершины T и T' соединены iff они отличаются только одной гранью (т.е. в T' есть одна грань, которой нет в T, и следовательно наоборот). Верно ли, что для любого связного G граф H будет связным?

Мне как-то сразу интуитивно довольно очевидно, что это верно.

Положим, что существует связной граф G, для которого H не связной. Возьмем из H две вершины, T и T', из разных компонент связности. T и T' отличаются n гранями. Без ограничения общности возьмем из T' грань, которой нет в T и добавим ее в T. Теперь в T есть цикл. Удалим из этого цикла ту грань, которой нет в T'. Теперь T и T' отличаются n-1 гранями. Проделываем эту процедуру n раз и получаем, что T и T' находятся в одной компоненте, вопреки тому, что мы их выбирали из разных компонент связности.

Значит такого графа G не существует. Верно?
Да, всё верно.

RawonaM

Цитата: GaLL от декабря 16, 2011, 06:31
Цитата: RawonaM от декабря 15, 2011, 15:50Нужно предложить алгоритм определения, является ли определенная грань e=(v,w) частью какого-то минимального остовного дерева некоего связанного графа с ве́сами (weights?).
Находим величину минимального остова данного графа. Потом стягиваем v и w, и у получившегося графа находим величину мин. остова. Если она отличается от предыдущей на вес ребра e, значит, ответ "Да", иначе "Нет".
Что-то мне тут не понятно. Что такое минимальный остов?

Там еще вопрос затесался, который имхо сложнее, посмотрите если не трудно:
Цитата: RawonaM от декабря 15, 2011, 15:50
Гораздо непонятнее второй вопрос: какой можно предложить алгоритм определения того, является ли определенная грань e=(v,w) частью всех минимальных остовных деревьев?

RawonaM

Цитата: GaLL от декабря 16, 2011, 06:33
Цитата: RawonaM от декабря  9, 2011, 21:55Тут в книге задача, не пойму каким образом она относится к теме.
Напрямую же. :)
Я имею в виду к теме жадных алгоритмов :)

GaLL

Цитата: RawonaM от декабря 16, 2011, 07:53
Что-то мне тут не понятно. Что такое минимальный остов?
То же, что и минимальное остовное дерево. Жаргонизм.

GaLL

Цитата: RawonaM от декабря 16, 2011, 07:53
Там еще вопрос затесался, который имхо сложнее, посмотрите если не трудно:
Цитата: RawonaM от декабря 15, 2011, 15:50
Гораздо непонятнее второй вопрос: какой можно предложить алгоритм определения того, является ли определенная грань e=(v,w) частью всех минимальных остовных деревьев?
Ну это легко. Тогда и только тогда, когда после удаления данного ребра величина мин. остовного дерева становится больше.

RawonaM

Цитата: GaLL от декабря 16, 2011, 07:56
Цитата: RawonaM от декабря 16, 2011, 07:53Что-то мне тут не понятно. Что такое минимальный остов?
То же, что и минимальное остовное дерево. Жаргонизм.
Я еще не уверен, что понял как работает ваш алгоритм, но он в любом случае как минимум О(m lg n), т.к. нужно найти остов, что занимает именно столько. Мой алгоритм (точнее модификация уже где-то подсмотренного алгоритма) работает в О(m+n).

RawonaM

Цитата: GaLL от декабря 16, 2011, 07:58
Цитата: RawonaM от декабря 16, 2011, 07:53Там еще вопрос затесался, который имхо сложнее, посмотрите если не трудно:
Цитата: RawonaM от декабря 15, 2011, 15:50Гораздо непонятнее второй вопрос: какой можно предложить алгоритм определения того, является ли определенная грань e=(v,w) частью всех минимальных остовных деревьев?
Ну это легко. Тогда и только тогда, когда после удаления данного ребра величина мин. остовного дерева становится больше.
А и правда! :scl: Спасибо!

GaLL

Цитата: RawonaM от декабря 16, 2011, 07:59
Я еще не уверен, что понял как работает ваш алгоритм, но он в любом случае как минимум О(m lg n), т.к. нужно найти остов, что занимает именно столько. Мой алгоритм (точнее модификация уже где-то подсмотренного алгоритма) работает в О(m+n).
Алгоритм Прима на фибоначчиевой куче работает за O(m + n*log(n)).

RawonaM

Цитата: GaLL от декабря 16, 2011, 08:04
Алгоритм Прима на фибоначчиевой куче работает за O(m + n*log(n)).
Нас такому не учили :( У нас в книге все алгоритмы O(m lg n).

RawonaM

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

RawonaM

Цитата: GaLL от декабря 16, 2011, 06:31
Цитата: RawonaM от декабря 15, 2011, 15:50Нужно предложить алгоритм определения, является ли определенная грань e=(v,w) частью какого-то минимального остовного дерева некоего связанного графа с ве́сами (weights?).
Находим величину минимального остова данного графа. Потом стягиваем v и w, и у получившегося графа находим величину мин. остова. Если она отличается от предыдущей на вес ребра e, значит, ответ "Да", иначе "Нет".
А как это работает? Что-то я не догоняю. А если вес 0? Тогда ничего отличаться не будет.

GaLL

Цитата: RawonaM от декабря 16, 2011, 20:46
Нужно найти самый легкий цикл на ориентированном графе с весом на гранях. Как это сделать оптимально?
Ничего кроме как запустить для каждой вершины алгоритм Дейкстры я не придумал.
Не знаю, как сделать быстрее, чем за O(V*E).

RawonaM

Цитата: GaLL от декабря 18, 2011, 17:34
Цитата: RawonaM от декабря 16, 2011, 20:46Нужно найти самый легкий цикл на ориентированном графе с весом на гранях. Как это сделать оптимально?
Ничего кроме как запустить для каждой вершины алгоритм Дейкстры я не придумал.
Не знаю, как сделать быстрее, чем за O(V*E).
А как за O(V*E)?

GaLL

Цитата: RawonaM от декабря 16, 2011, 22:39
Цитата: GaLL от декабря 16, 2011, 06:31
Цитата: RawonaM от декабря 15, 2011, 15:50Нужно предложить алгоритм определения, является ли определенная грань e=(v,w) частью какого-то минимального остовного дерева некоего связанного графа с ве́сами (weights?).
Находим величину минимального остова данного графа. Потом стягиваем v и w, и у получившегося графа находим величину мин. остова. Если она отличается от предыдущей на вес ребра e, значит, ответ "Да", иначе "Нет".
А как это работает? Что-то я не догоняю. А если вес 0? Тогда ничего отличаться не будет.
Совсем необязательно, может и отличаться. Например, если веса остальных рёбер отрицательные, ребро vw при этом не мост. Тогда величина мин. остова со стянутыми v и w будет больше.
Стягивание вершин - т. е. они объединяются в одну, а ребро между ними исчезает.

RawonaM

Цитата: GaLL от декабря 18, 2011, 17:41
Совсем необязательно, может и отличаться. Например, если веса остальных рёбер отрицательные, ребро vw при этом не мост. Тогда величина мин. остова со стянутыми v и w будет больше.
Ну да, может отличаться. Но таким образом это условие уже не годно, ведь не будет отличаться, а может отличаться.

GaLL

Цитата: RawonaM от декабря 18, 2011, 17:48
Цитата: GaLL от декабря 18, 2011, 17:41
Совсем необязательно, может и отличаться. Например, если веса остальных рёбер отрицательные, ребро vw при этом не мост. Тогда величина мин. остова со стянутыми v и w будет больше.
Ну да, может отличаться. Но таким образом это условие уже не годно, ведь не будет отличаться, а может отличаться.
Почему негодно? Приведите контрпример.

GaLL

Цитата: RawonaM от декабря 18, 2011, 17:39
Цитата: GaLL от декабря 18, 2011, 17:34
Цитата: RawonaM от декабря 16, 2011, 20:46Нужно найти самый легкий цикл на ориентированном графе с весом на гранях. Как это сделать оптимально?
Ничего кроме как запустить для каждой вершины алгоритм Дейкстры я не придумал.
Не знаю, как сделать быстрее, чем за O(V*E).
А как за O(V*E)?
Для относительно плотных графов - V раз алгоритм Дейкстры (каждый из них - за O(E + V*log(V))).

RawonaM

Цитата: GaLL от декабря 18, 2011, 17:54
Цитата: RawonaM от декабря 18, 2011, 17:48
Цитата: GaLL от декабря 18, 2011, 17:41Совсем необязательно, может и отличаться. Например, если веса остальных рёбер отрицательные, ребро vw при этом не мост. Тогда величина мин. остова со стянутыми v и w будет больше.
Ну да, может отличаться. Но таким образом это условие уже не годно, ведь не будет отличаться, а может отличаться.
Почему негодно? Приведите контрпример.
Если граф со всеми гранями неотрицательным весом, на определенной грани 0. Убираем ее, добавляем ее, вес минимального остова не должен меняться. Или может не меняться при определенном раскладе.
Например возьмем квадрат, все грани по нулю. Или все грани по любому n. Убираем одну грань, вес минимального остова не меняется, хотя был минимальный остов с ней.

GaLL

Цитата: RawonaM от декабря 16, 2011, 08:28
Цитата: GaLL от декабря 16, 2011, 08:04
Алгоритм Прима на фибоначчиевой куче работает за O(m + n*log(n)).
Нас такому не учили :( У нас в книге все алгоритмы O(m lg n).
О фибоначчиевых кучах можно прочитать, например, в книге "Алгоритмы: построение и анализ" Кормена, Лейзерсона, Ривеста. На практике эта структура данных начинает давать выигрыш только при ~миллионе элементов, так как она довольно сложно устроена.

GaLL

Цитата: RawonaM от декабря 18, 2011, 18:00
Цитата: GaLL от декабря 18, 2011, 17:54
Цитата: RawonaM от декабря 18, 2011, 17:48
Цитата: GaLL от декабря 18, 2011, 17:41Совсем необязательно, может и отличаться. Например, если веса остальных рёбер отрицательные, ребро vw при этом не мост. Тогда величина мин. остова со стянутыми v и w будет больше.
Ну да, может отличаться. Но таким образом это условие уже не годно, ведь не будет отличаться, а может отличаться.
Почему негодно? Приведите контрпример.
Если граф со всеми гранями неотрицательным весом, на определенной грани 0. Убираем ее, добавляем ее, вес минимального остова не должен меняться. Или может не меняться при определенном раскладе.
Например возьмем квадрат, все грани по нулю. Или все грани по любому n. Убираем одну грань, вес минимального остова не меняется, хотя был минимальный остов с ней.
Не просто убираем, а объединяем две вершины в одну. Соответственно, если ребро соединяло v и w с некоей вершиной t, то теперь оно будет соединять объединённую вершину с t. после стягивания можно избавиться от мульграфности, отбросив каждое ребро, для которого существует соединяющее те же вершины, но меньшее или равное по весу.

RawonaM

Цитата: GaLL от декабря 18, 2011, 18:05
Не просто убираем, а объединяем две вершины в одну. Соответственно, если ребро соединяло v и w с некоей вершиной t, то теперь оно будет соединять объединённую вершину с t. после стягивания можно избавиться от мульграфности, отбросив каждое ребро, для которого существует соединяющее те же вершины, но меньшее или равное по весу.
Хорошо, значит контрпример такой: берем квадрат со всеми гранями с весом ноль.
Взяли одну, стянули, получился треугольник, но вес остова не изменился.

GaLL

Цитата: RawonaM от декабря 18, 2011, 18:21
Хорошо, значит контрпример такой: берем квадрат со всеми гранями с весом ноль.
Взяли одну, стянули, получился треугольник, но вес остова не изменился.
Отсюда следует, что ребро, которое стягивали, содержится в одном из минимальных остовов исходного графа.

RawonaM

Цитата: GaLL от декабря 18, 2011, 18:23
Цитата: RawonaM от декабря 18, 2011, 18:21Хорошо, значит контрпример такой: берем квадрат со всеми гранями с весом ноль.
Взяли одну, стянули, получился треугольник, но вес остова не изменился.
Отсюда следует, что ребро, которое стягивали, содержится в одном из минимальных остовов исходного графа.
Это потому, что вес ноль?
Что-то я уже запутался совсем :)

RawonaM

Цитата: GaLL от декабря 16, 2011, 06:31
Если она отличается от предыдущей на вес ребра e, значит, ответ "Да", иначе "Нет".
Получается, что если вес ребра = 0, то ответ да и нет имеет одинаковый результат.

GaLL

Цитата: RawonaM от декабря 18, 2011, 18:25
Цитата: GaLL от декабря 16, 2011, 06:31
Если она отличается от предыдущей на вес ребра e, значит, ответ "Да", иначе "Нет".
Получается, что если вес ребра = 0, то ответ да и нет имеет одинаковый результат.
Если вес ребра - ноль, то это ещё не говорит о том, что вес мин. остова не изменится при стягивании.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр