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

Два наименьших остовных дерева

29.03.2022, 14:45. Показов 2283. Ответов 12

Студворк — интернет-сервис помощи студентам
Дан взвешенный обычный граф без отрицательных весов, нужно найти два наименьших остовных дерева, то есть наименьший граф, покрывающий все вершины и второй минимальный граф, покрывающий все вершины. Были некоторые идеи, как это можно сделать известными мне алгоритмами, но, в итоге, всё сходилось к полному перебору. Есть какой-то вариант, оптимальней полного перебора, или это единственное решение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2022, 14:45
Ответы с готовыми решениями:

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

Сформировать два идеально сбалансированных дерева из отрицательных и неотрицательных элементов дерева T
Пусть имеется бинарное дерево T. Сформировать два идеально сбалансированных дерева из отрицательных и неотрицательных элементов дерева T.

Разбиение дерева на два дерева по указанному значению информационного поля элемента для разбиения
Дерево: Разбиение дерева на два дерева по указанному значению информационного поля элемента для разбиения. Буду очень благодарна)

12
383 / 280 / 112
Регистрация: 28.04.2015
Сообщений: 1,726
29.03.2022, 23:41
хорошая задачка, интересная
хочется понять не только поиск 2ого, а в принципе n-го минимального остова

склоняюсь к NP (вроде здесь нет релаксации), но, возможно, есть красивое какое-то решение
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,700
01.04.2022, 18:32
Надо попробовать доказать следующее: наименьшее остовное дерево и второе минимальное остовное дерево содержат общие ребра, кроме некоторых двух (достаточно одно ребро заменить на другое и первое дерево превратится во второе). Это гипотеза.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
01.04.2022, 19:08
Мне кажется это задачка в три хода.

Находим любым известным алгоритмом минимальное остовное дерево.
Удаляем из графа ребро с минимальным весом так, чтобы граф остался связным.
Находим любым известным алгоритмом минимальное остовное дерево.
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,700
01.04.2022, 19:51
1. Рассмотрим наименьшее остовное дерево t1 и остовное дерево t2, полученное заменой одного из ребер r1 дерева t1 на другое ребро r2 с наименьшей разницей весов (с разницей от 0 и более). Пока мы не знаем, является ли второе дерево t2 вторым минимальным, но оно минимально из тех, которые отличаются только одним ребром, по определению.

2. Рассмотрим еще третье дерево t3, которое будет отличаться от первого дерева t1 как минимум одним ребром и еще одним ребром (как минимум одним), так как второе дерево t2 самое лучшее из тех, которые отличаются от первого дерева одним ребром. Будем доказывать, что дерево t3 не лучше t2.

3. Если третье дерево t3 отличается от второго t2 ровно одним ребром (то есть дерево t3 содержит ребро r2), то дерево t3 не будет лучше, чем t2.

... Продолжение следует ...

Добавлено через 7 минут
4. Из п.3 следует, что t3 должно отличаться от t2 как минимум двумя ребрами, чтобы быть "минимальнее", и при этом, соответственно, не содержит ребро r2. При этом t3 может содержать ребро r1, например, но тогда от дерева t1 все равно должно отличаться двумя и более ребрами.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
01.04.2022, 20:22
Цитата Сообщение от Mikhaylo Посмотреть сообщение
то дерево t3 не будет лучше, чем t2.
так по условиям это и не требуется. если их общий вес будет одинаковым, они все равно останутся минимальными.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
02.04.2022, 09:53
Цитата Сообщение от vantfiles Посмотреть сообщение
Мне кажется это задачка в три хода.

Находим любым известным алгоритмом минимальное остовное дерево.
Удаляем из графа ребро с минимальным весом так, чтобы граф остался связным.
Находим любым известным алгоритмом минимальное остовное дерево.
Вряд ли это будет работать.

Может быть так, что в графе все остальные ребра имеют огромный вес, существенно превосходящий вес единственного минимального ребра. В такой ситуации применение вашего алгоритма приведет к резкому скачку общего веса дерева. А если бы мы вместо этого заменили какое-то тяжелое ребро на чуть более тяжелое ребро, то скачок мог бы получиться совсем маленьким.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
02.04.2022, 09:58
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
если бы мы вместо этого заменили
А разве по условию мы можем что-то менять в исходном графе?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вряд ли это будет работать.
Будет. Набросайте кучу примеров и сами посмотрите, что будет получаться.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
02.04.2022, 10:38
Цитата Сообщение от vantfiles Посмотреть сообщение
А разве по условию мы можем что-то менять в исходном графе?
Ым... Простите, а "удаляем из графа ребро с минимальным весом так, чтобы граф остался связным" в сообщении #4 - это чьи слова?

Цитата Сообщение от vantfiles Посмотреть сообщение
Будет. Набросайте кучу примеров и сами посмотрите, что будет получаться.
Нет, не будет. Выше я описал, как построить пример, на котором ничего получаться не будет. Достаточно одного примера.

Граф K4 c картинки. Минимальное дерево 1+1000+1001=2002. Если по вашему предложению исключить ребро 1 из рассмотрения, то получим минимальное дерево 1000+1001+1002=3003. А это - не второе дерево. Второе дерево - это например 1+1001+1002=2004.

Теперь понятно?
Миниатюры
Два наименьших остовных дерева  
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
02.04.2022, 10:52
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Теперь понятно?
согласен. кумекаем дальше.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
07.04.2022, 02:08
Цитата Сообщение от vantfiles Посмотреть сообщение
Мне кажется это задачка в три хода.
Находим любым известным алгоритмом минимальное остовное дерево.
Удаляем из графа ребро с минимальным весом так, чтобы граф остался связным.
Находим любым известным алгоритмом минимальное остовное дерево.
По крайней мере, это доказывает, что задачу можно решить без полного перебора, т.е. задача не NP.

Нужно по-очереди пробовать удалять каждое из ребер первого дерева, и строить новое дерево. Затем выбрать из полученных деревьев минимальное. Это сработает, т.к. обязательно существует ребро, которое присутствует в первом дереве, но отсутствует во втором.
0
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,700
07.04.2022, 06:20
Цитата Сообщение от vrm2 Посмотреть сообщение
Нужно по-очереди пробовать удалять каждое из ребер первого дерева, и строить новое дерево. Затем выбрать из полученных деревьев минимальное. Это сработает, т.к. обязательно существует ребро, которое присутствует в первом дереве, но отсутствует во втором.
У меня есть предложение - модифицированный алгоритм Краскала: заменяем не каждое из ребер на любое, а выбираем такую замену, которая даёт минимальное изменение весов этих двух ребер (от 0 и выше). Затем, в соответствии с алгоритмом Краскала, пересчитываем вес остова (можно воспользоваться частичным результатом предыдущего прохода). И если изменение веса остова составило не более, чем разница весов тех двух ребер, то дальнейший перебор можно остановить. Доказательства нет, но оно аналогично доказательству самого алгоритма Краскала?
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
20.04.2022, 11:59
Вариант который приходит на ум:
Строим минимальное оставное дерево
По очереди из графа удаляем по одному ребру данного дерева (при условии что граф остается связанным)
Каждый раз находим по новому графу минимальное оставное дерево (получим n-1 новых деревьев)
Выбираем из полученных деревьев минимальное, оно может совпадать по размеру с исходным минимальным (если есть несколько одинаковых по размеру разных минимальных деревьев)

По сути это перебор и не решается задача нахождения n-го минимального дерева.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2022, 11:59
Помогаю со студенческими работами здесь

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

Найти два наименьших числа
Вводится последовательность из N целых чисел.Признак окончания ввода- число 0.Найти два наименьших числа.

Найти из последовательности два наименьших числа
нужна помощь.. нужно ввести последовательность из целых чисел(задать с клавиатуры) найти из последовательности два наименьших числа.

Найти два наименьших числа последовательности
Вводиться последовательность ненулевых чисел, 0 – конец последовательности. Найти два наименьших числа (Turbo C++)

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru