2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение03.07.2021, 21:56 


22/06/21
5
Здравствуйте,
интересует вопрос:
имеется (известен ли) сейчас эффективный, реализуемый на каких-либо языках программирования алгоритм поиска всех элементарных (без повторения вершин) циклов в неориентированном графе, включая разумеется гамильтоновы, если они есть? Интересен факт существования такого алгоритма, реализация не обязательна, но при положительном ответе по возможности прошу писать о том, что реально где-то реализовывалось, а не о том, что "теоретически может быть реализовано" и привести описание алгоритма или ссылку на описание или источник. Также если известно, то указать размерность решаемой задачи или то, что она решена для общего случая (конечно для варианта с конечным временем).
Спасибо всем проявившим интерес!

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение04.07.2021, 00:08 
Аватара пользователя


20/05/21
38
Здравствуйте.
1. Есть, конечно. Переборный алгоритм с возвратом, т.н. бэктрекинг (backtracking). У меня есть реализация (на паскале) для поиска всех гамильтоновых циклов. Описание алгоритма взято из книги Витольда Липского "Комбинаторика для программиста". Алгоритм с возвратом генерирует повторяющиеся решения, каждый цикл печатается два раза, по часовой и против часовой стрелки.
Ну можно его переделать под поиск всех циклов. Всё это будет работать, если в графе не больше 20 вершин, потом наступит экспоненциальный взрыв.

2. Для большей размерности вам знать все циклы ни к чему, вы запрашиваете информацию большую, чем сумеете переработать в течение всей жизни. Ну давайте подсчитаем, сколько гамильтоновых циклов в полном графе: любая перестановка вершин будет циклом. $n!$ - большое число, например, при $n=250$ это больше, чем число атомов в видимой нами части Вселенной.

3. Обычно все циклы в графе хотят узнать люди, которые не умеют делать корректные математические постановки. Например, для того, чтобы разомкнуть все циклы в неориентированном графе достаточно найти поиском в глубину все хорды и удалить их из графа. Или просто построить каркас графа глубиной или шириной.
Если что-то нужно сделать для всех циклов неориентированного графа, можно сделать это для фундаментального множества циклов. Ф-циклы находятся всё тем же поиском в глубину кубическим (от числа вершин) алгоритмом (Витольд Липский "Комбинаторика для программиста").

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение04.07.2021, 13:16 


27/08/16
10195
inek82 в сообщении #1525261 писал(а):
эффективный
Циклов в общем случае экспоненциально много.

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение24.10.2021, 17:28 


22/06/21
5
_Swetlana в сообщении #1525275 писал(а):

Для большей размерности вам знать все циклы ни к чему, вы запрашиваете информацию большую, чем сумеете переработать в течение всей жизни.
...
Если что-то нужно сделать для всех циклов неориентированного графа, можно сделать это для фундаментального множества циклов. Ф-циклы находятся всё тем же поиском в глубину кубическим (от числа вершин) алгоритмом (Витольд Липский "Комбинаторика для программиста").


Спасибо за интересный ответ.
И все же: насколько мне известно (возможно мои сведения устарели), задача поиска Гамильтонова цикла (циклов) относится к нерешенным задачам или даже к задачам класса np (как и задача поиска всех циклов графа)? Сам этот факт не говорит о том, что ее решение представляет интерес?
К сожалению пока не удалось найти упомянутую Вами книгу, но неужели если есть решение с использованием бэктрэкинга, то его нельзя упростить хотя бы до полиномиального решения?
В целом же интересно, насколько вообще эти задачи практически значимы для большого числа вершин? Имеются ли у них приложения в науке и технологии кроме чисто математического интереса (хотя, конечно, как говорится в литературе по сложности алгоритмов решение одной из np сложных задач будет означать возможность решения (или решение) других) и логистики (например, химия, биология, производство или что-то еще в этом духе), которые могут помочь облегчить решение трудоемких практических задач?

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение24.10.2021, 19:05 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
inek82 в сообщении #1536208 писал(а):
задача поиска Гамильтонова цикла (циклов) относится к нерешенным задачам или даже к задачам класса np
Задача проверки наличия в графе гамильтонова цикла - классический пример np-полной задачи.
inek82 в сообщении #1536208 писал(а):
как и задача поиска всех циклов графа
А вот задача поиска всех циклов графа - не является np-полной, не принадлежит np и вообще не является задачей распознавания (а np принадлежат только задачи с отвтеом "да/нет").
Для задачи поиска всех циклов разумно думать об алгоритмах с полиномиальной задержкой, и такой алгоритм придумывается несложно (если я нигде не ошибся): берем ребро $AB$, перебираем все ребра вида $AC$, если есть путь $C \to A$, не проходящий через эти два ребра - перечисляем все такие пути (перебираем всех кандидатов в очередное ребро и проверяем, есть ли хоть один нужный путь).
inek82 в сообщении #1536208 писал(а):
В целом же интересно, насколько вообще эти задачи практически значимы для большого числа вершин?
К ним сводится очень много всего (правда часто с квадратичным или хуже ростом в размере задачи), да и сами проблемы с графами вроде бы нужны для каких-то схем или построения маршрутов.

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение25.10.2021, 20:22 


22/06/21
5
mihaild в сообщении #1536217 писал(а):
inek82 в сообщении #1536208 писал(а):
...берем ребро $AB$, перебираем все ребра вида $AC$, если есть путь $C \to A$, не проходящий через эти два ребра - перечисляем все такие пути (перебираем всех кандидатов в очередное ребро и проверяем, есть ли хоть один нужный путь).


да, если перебирать так, то результат будет, но, как показали выше - при росте входа получим резкий рост сложности...
а что касается сведения к задачам с получением алгоритмов квадратичной точности - алгоритмы сложности до n^6 в некоторых случаях, думаю, будут приемлемыми, так как сильно увеличивают возможности по сравнению с полным перебором, который дает для плотного графа почти n! или e^n...

 Профиль  
                  
 
 Re: Имеется ли алгоритм поиска всех элементарных циклов графа?
Сообщение16.11.2021, 01:02 
Аватара пользователя


20/05/21
38
1. Набираем в яндексе Витольд Липский Комбинаторика для программиста и по первой же ссылке скачиваем книгу :wink:
https://vk.com/wall-101965347_180259

2. Очень рекомендую почитать уже Липского, многое разъяснится.
а) Открываете Липского, читаете главу Поиск в глубину.
б) Не закрывая Липского, находите и читаете главу Алгоритм с возвратом (это и есть бектрекинг).
в) После прочтения задаёте себе вопрос:
А чем, собственно, линейный (от числа вершин и числа рёбер) поиск в глубину, который находит на графе ровно один путь (если мы его используем для поиска пути между двумя вершинами), отличается от экспоненциального алгоритма с возвратом, который генерирует все пути пути между двумя вершинами?

И отвечаете: Они (эти два алгоритма, глубина и алгоритм с возвратом) отличаются ровно одной строчкой. В глубине, когда мы возвратом уходим из просмотренной вершины, вершина остаётся просмотренной.
В алгоритме с возвратом, когда мы уходим из вершины, она становится снова новой и пригодной для дальнейшего использования.

3. Если речь идёт о реальных задачах, то во многих из них среди прочего есть и коммивояжер. Например, при планировании очередности изготовления чего-либо очень часто возникает коммивояжер. Разные последовательности имеют разные технологические нарушения, вариантов - n!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group