2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Поиск циклов на диграфе и оценка макс. длины (жел. Pascal)
Сообщение30.04.2009, 18:37 


26/02/06
78
Russia, Nizhny Novgorod
Уважаемые коллеги,

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

Пример: пусть есть граф
Код:
digraph G {
    A->B;
    A->D;
    B->C;
    C->B;
    C->A;
    D->A;
}


Циклы A->D->A и A->B->C->A - искомые. Цикл A->B->C->B->C->A - не интересен. Максимальная длина цикла - 3 вершины.

Домашнее задание я сделал - нашел основные статьи по этой теме:

  • 1972 - Robert Tarjan - диссертация "Enumeration of the elementary circuits of a directed graph" (Cornell Univ.)
  • 1975 - Donald B. Johnson - "Finding all the elementary circuits of a directed graph" (SIAM J. COMPUT. Vol. 4, No. 1, March 1975)
  • 2006 - Hongbo Liu, Jiaxin Wang - "A new way to enumerate cycles in graph", Proceedings of the Advanced International Conference on Telecommunications and International Conference on Internet and Web Applications and Services (AICT/ICIW 2006)


Посмотрел все, сделал вывод, что последнее - это как раз то, что мне надо . К CS я никак не отношусь, к сожалению, статьи написаны, видимо, математиками для математиков, понять как реализовать этот алгоритм на Паскале (Delphi) для моей структуры не могу.

Пытался поискать доступные описания алгоритма Тарьяна - все они опираются на рекурсивное использование неких алгоритмов "поиска в ширину" или "поиска в глубину", с которыми я не знаком, как и с тем, как их реализовывать, т.к. не знаком с теорией графов, к сожалению. Кроме того, некоторые реализации дают какие списки вершин, которые называются strongly connected components и непонятно какое отношение имеют к циклам, которые мне нужны.

Также все примеры, которые я смог найти, полагаются на какое-то очень странное задание графа с т.з. ООП-программиста - в виде каких-то таблиц. У меня в программе граф задаётся так - есть список указателей (TObjectList), который содержит вершины (у каждой вершины есть свой уникальный идентификатор), к каждой вершине привязаны два списка указателей (тоже TObjectList) - список, в котором перечислены исходящие связи (номера тех вершин, куда от этой вершины уходят ребра) и список входящих связей.

Собственно вот задача. Не мог бы кто-нибудь перевести мне на доступный язык алгоритм нахождения циклов на таким образом заданном графе, может быть поделиться исходниками, если не на Pascal, то на C/C++ я тоже читаю?

Искал, кстати, какие-нибудь библиотеки - нашел только Boost Graph Library из приличного, причем циклов там, как я понял, нет.

Спасибо!

 Профиль  
                  
 
 Re: Поиск циклов на диграфе и оценка макс. длины (жел. Pasca
Сообщение01.05.2009, 13:35 
Заслуженный участник


15/05/05
3445
USA
ZYV писал(а):
некоторые реализации дают какие списки вершин, которые называются strongly connected components и непонятно какое отношение имеют к циклам, которые мне нужны.
Задача перечисления циклов в орграфе относится к NP-полным, то есть точно решается только полным перебором. Чтобы сократить этот перебор, граф сначала разбивается на сильно связанные компоненты (ССК). Поскольку циклов, связывающих вершины разных ССК, не существует по определению, исходная задача сводится к подзадачам с меньшим числом вершин.

Я лет 15 назад делал на заказ программу, которая включала поиск циклов в орграфе с несколькими тысячами вершин. Там правда было не просто перечисление циклов, а выбор оптимального набора циклов. С учетом этого опыта, при том, что я достаточно хорошо знаком с математикой и CS, я Вам советую найти профессионала, который задачу реализует. Или самому стать профессионалом.

Может быть Вам поможет вот эта книга:
В.Липский. Комбинаторика для программистов. Мир. 1988
Там многие полезные алгоритмы приведены на псевдокоде.

 Профиль  
                  
 
 
Сообщение06.05.2009, 23:09 


26/02/06
78
Russia, Nizhny Novgorod
Yuri Gendelman
Спасибо большое за пояснения, теперь я себе более ли менее представляю полную картину. За книгу тоже весьма признателен. Полистал - вижу, что там есть много полезного, надеюсь будет время более внимательно ознакомиться. Найти профессионала у меня возможности нет, т.к. я ещё в России => нет денег, а профессионалы (тот же самый я, только в другой области) бесплатно не работают. Поэтому пока придется самому...

Алгоритм поиска я реализовал по статье от 2006 года, действительно, оказалось, что wisdom is simple, but hard-won. Программа получилась довольно простая, хотя скорость, конечно, не впечатляет. Ну, впрочем, вершин у меня будет в любом случае не больше двух сотен, вот связей в теоретических данных много - это плохо, циклов получается даже при 9 полносвязных элементах порядка 100 000, а уж при, скажем 36 вообще полный атас...

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

Кстати, я предполагаю после завершения работ выложить всё это под MIT-лицензией, всё равно публиковаться по этой груде кода никто не сможет, а отдельные алгоритмы могут кому-нибудь пригодиться. Ценность кодов вашей системы ещё не потеряла актуальность за давностью времен?

 Профиль  
                  
 
 
Сообщение07.05.2009, 00:25 
Заслуженный участник


15/05/05
3445
USA
Нанимать профессионала за личные деньги и вне России никто не будет. Но раньше кафедра могла, например, нанять программиста на хозтему. М.б. возможны и другие варианты,

Я делал программу для одной финансовой структуры. Во время кризиса неплатежей в начале 90-х они решили по своей базе взаимных задолженностей искать цепочки взаимозачетов и брать процент за разруливание. Так что узлов (юр.лиц) было много, но дуг (долгов) у каждого - относительно немного. Еще одна особенность - одна дуга (долг) могла расщепляться и включаться в несколько циклов. Максимальная длина цикла задавалась как параметр. Это имело и содержательный смысл - слишком длинные цепочки трудно организовать и оформить.

Происходило все это >15 лет назад, еще до переезда в США, а 2 переезда = 1 пожару...

 Профиль  
                  
 
 
Сообщение07.05.2009, 00:39 


26/02/06
78
Russia, Nizhny Novgorod
Yuri Gendelman
Я себе это хорошо представляю, но там, где сейчас повезло быть мне, самый профессиональный профессионал в этом плане -- я, причем денег нет и на меня, но на меня есть другие рычаги давления :) Давайте пока оставим эту грустную тему или перенесем в личные сообщения.

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

Оставляю за собой право задавать дополнительные вопросы по мере из возникновения :)

 Профиль  
                  
 
 
Сообщение09.05.2009, 07:12 
Заслуженный участник


15/05/05
3445
USA
ZYV писал(а):
У меня задача связана ... с разработкой универсального метода, который бы позволил сделать какие-нибудь практически полезные выводы о топологии сети нервных клеток. ...
Пока что вопросы возникли у меня: а) почему тогда ориентированные графы? б) о каких топологических параметрах сети может идти речь?

 Профиль  
                  
 
 Re: Поиск циклов на диграфе и оценка макс. длины (жел. Pascal)
Сообщение18.07.2009, 20:03 


17/07/09
1
Уважаемый ZYV. С интересом прочитал Ваше сообщение. По своей работе мне нужна программа построения матрицы циклов. Вразумительных алгоритмов нигде не нашел. Есть только многочисленные алгориты построения всех циклов графа. Я пытаюсь сделать необходимые программы сам с помощью Wolfram Mathematica. По алгоритму в книге В. Липского сделал программу. Этот алгоритм очень неэффективен и совсем не пригоден для графов с большим количеством параллельных ребер. Сейчас я пытаюсь по книге Э. Рейнгольда, Ю. Нивергельта и Н. Део "Комбинаторные алгоритмы . Теория и практика"
реализовать более совершенный алгоритм, разработанный Donald B. Johnson в его статье:
1975 - Donald B. Johnson - "Finding all the elementary circuits of a directed graph" (SIAM J. COMPUT. Vol. 4, No. 1, March 1975).
К сожалению, не понятно что за переменные "g " и "f" используются в процедуре CYCLE. А статьи Johnson у меня нет. Не могли бы Вы послать мне по эл. почте эту статью. У меня есть много литературы по математике и Mathematica и по другим темам. Может и я смог бы Вам чем-нибудь помочь?
С уважением Georgy

 Профиль  
                  
 
 Re: Поиск циклов на диграфе и оценка макс. длины (жел. Pascal)
Сообщение18.07.2009, 20:26 


26/02/06
78
Russia, Nizhny Novgorod
На всякий случай для всех: эту статью можно бесплатно и официально скачать с сайта университета, где работал этот господин. В Google Scholar первая ссылка:

http://scholar.google.com/scholar?q=Don ... tnG=Search

К сожалению, у меня как раз идет пожар... т.е. переезд. Поэтому не могу найти время ответить на последующие вопросы Yuri Gendelman, хотя, надеюсь, позже я смогу к этому вернуться, потому, что вопросы совершенно правильные.

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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