|
|
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Кто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 07:22 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Ну, скажем, такой алгоритм (типа поиска "в глубину"). Только он очень долгий :) 1. создаем массив вершин графа 2. создаем массив пройденных вершин графа 3. берем первую вершину 4. берем произвольное ребро графа, выходящее из этой вершины. 5. Если вторая вершина ребра графа содержится в массиве пройденных вершин, то мы нашли цикл. 6. В противном случае заносим вершину в пройденные, делаем ее текущей и идем на п.4 7. Если данная вершина является листом (т.е. из нее больше не выходит ребер), то возвращаемся на один уровень вверх (к предыдущей пройденной вершине) и возвращаемся к п.4 8. Если вершин больше не осталось, то мы обошли весь граф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 08:47 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Станислав С...кий FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Ну, скажем, такой алгоритм (типа поиска "в глубину"). Только он очень долгий :) ... 5. Если вторая вершина ребра графа содержится в массиве пройденных вершин, то мы нашли цикл. ... Ну хорошо, эт вроде все будет работать. А ежели мы накладываем дом условие - граф ориентированный. И тогда понятие цикла несколько меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 09:16 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Farus Ну хорошо, эт вроде все будет работать. А ежели мы накладываем дом условие - граф ориентированный. И тогда понятие цикла несколько меняется. А в неориентированном графе две вершины и ребро уже цикл. Алгоритм как раз на ориентированных работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 10:15 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Хотя нет. В этом случае нужно начинать с каждой вершины и чистить список пройденных. Наверное есть лучший алгоритм, надо книжки читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 10:17 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера.хотите написать свою реализацию Spanning Tree алгоритма ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 11:36 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Хочу тебя огорчить. Практически 100% алгорутмов теории графов уже были предложены в прошлом веке. Тебе остаётся только почитать теорию и выбрать алгоритм, который наиболее близко подходит к решению твоей задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 12:04 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
mayton FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Хочу тебя огорчить. Практически 100% алгорутмов теории графов уже были предложены в прошлом веке. Тебе остаётся только почитать теорию и выбрать алгоритм, который наиболее близко подходит к решению твоей задачи. Ну я искал по гуглу. Готового не нашел. Хотя алгорим то вообщем то должен быть фундаментальным. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 12:08 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Гость_0 FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера.хотите написать свою реализацию Spanning Tree алгоритма ? :) Это вроде коммуникации. Нее... мне для прикладной программки. Хотя можно сделать и перебором тупым.... Только боюсь количество переборов будет возрастать в геометрической прогрессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 12:28 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Зависит от того, что именно Вам нужно. Найти все циклы во всех вариантах? Найти фундаментальные циклы? Определить факт наличия циклов без поиска самих циклов? Еще что-нибудь? И таки да, гугль содержит более чем достаточно информации на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 13:55 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Alexsalog mayton FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Хочу тебя огорчить. Практически 100% алгорутмов теории графов уже были предложены в прошлом веке. Тебе остаётся только почитать теорию и выбрать алгоритм, который наиболее близко подходит к решению твоей задачи. Ну я искал по гуглу. Готового не нашел. Хотя алгорим то вообщем то должен быть фундаментальным. :-) Постройте по вашему графу остов. Все ребра, не вошедшие в остов - уже элементы циклов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 16:38 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
очень интересно, но неоднозначно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 17:50 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarer FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Зависит от того, что именно Вам нужно. Найти все циклы во всех вариантах? Найти фундаментальные циклы? Определить факт наличия циклов без поиска самих циклов? Еще что-нибудь? И таки да, гугль содержит более чем достаточно информации на эту тему. Найти любые циклы, притом если граф строится итеративно - то сообщить об этом цикле и показать его в момент добавления решающего ребра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 11:33 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Тогда есть совершенно очевидный алгоритм. Поддерживать список возможных путей между вершинами графа. То есть начать с одной вершины; далее добавили вершину - ничего не делаем, добавили ребро - достраиваем список путей, используя начинающиеся и заканчивающиеся в вершинах этого ребра. Каждый раз, когда при добавлении ребра АБ уже имеем путь БА или - внимание - несколько таких путей, вот вам, бабушка, и циклы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 11:40 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarerТогда есть совершенно очевидный алгоритм. Поддерживать список возможных путей между вершинами графа. То есть начать с одной вершины; далее добавили вершину - ничего не делаем, добавили ребро - достраиваем список путей, используя начинающиеся и заканчивающиеся в вершинах этого ребра. Каждый раз, когда при добавлении ребра АБ уже имеем путь БА или - внимание - несколько таких путей, вот вам, бабушка, и циклы. Получится дикое количество комбинаций...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 11:49 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
AlexsalogПолучится дикое количество комбинаций...... Это если ребра добавляются интерактивно-то? Не очень верится, раньше оператор устанет :) А так - задача поиска всех циклов, если не ошибаюсь, np-полна, следовательно либо дикое количество комбинаций в памяти, либо перебор того же дикого количества комбинаций на ходу. Можно применять методы сокращения, скажем, железнодорожники строят граф только по узловым станциям (грубо говоря, по развилкам), сжимая вершины один вход - один выход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 11:56 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarer AlexsalogПолучится дикое количество комбинаций...... Это если ребра добавляются интерактивно-то? Не очень верится, раньше оператор устанет :) А так - задача поиска всех циклов, если не ошибаюсь, np-полна, следовательно либо дикое количество комбинаций в памяти, либо перебор того же дикого количества комбинаций на ходу. Можно применять методы сокращения, скажем, железнодорожники строят граф только по узловым станциям (грубо говоря, по развилкам), сжимая вершины один вход - один выход. Насчет развилок - мысль. Про np полноту - тоже. Ок, спасибо. Хотя наверное как всегда есть вариант комбинированный - чать отдается на "память" а часть на перебор... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 12:27 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarerКаждый раз, когда при добавлении ребра АБ уже имеем путь БА или - внимание - несколько таких путей, вот вам, бабушка, и циклы. При всем моем, откуда такая зашоренность отклика на вторую сторону? Переформулировать вопрос и считать его решенным. Ваще децсад. "уже имеем путь БА". И как мы узнаем что мы его, этот путь, "уже имеем"(или, уже "поимели")? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 22:16 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Alexsalog softwarer AlexsalogПолучится дикое количество комбинаций...... Это если ребра добавляются интерактивно-то? Не очень верится, раньше оператор устанет :) А так - задача поиска всех циклов, если не ошибаюсь, np-полна, следовательно либо дикое количество комбинаций в памяти, либо перебор того же дикого количества комбинаций на ходу. Можно применять методы сокращения, скажем, железнодорожники строят граф только по узловым станциям (грубо говоря, по развилкам), сжимая вершины один вход - один выход. Насчет развилок - мысль. Про np полноту - тоже. Ок, спасибо. Хотя наверное как всегда есть вариант комбинированный - чать отдается на "память" а часть на перебор... Этот тоже. Как Добчинский раскланялся. Типа спасибо. Насчет развилок -- это мысль? Про эту банальщину тут никто и не вспоминал. Она тебе поможет как мертвому припарки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 22:19 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
реттиВаще децсад. "уже имеем путь БА". И как мы узнаем что мы его, этот путь, "уже имеем"(или, уже "поимели")? Ваш вопрос показывает, что Вы либо не читали то, на что отвечаете, либо временно/постоянно не в состоянии воспринимать прочитанное. До тех пор, пока означенные факторы не изменятся, беседа вряд ли будет осмысленной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 22:48 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
если речь только об интерактивной проверке, то проще и быстрее банально пускать волну из обеих вершин, которые соединяет новосозданное ребро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 23:08 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsvесли речь только об интерактивной проверке, то проще и быстрее банально пускать волну из обеих вершин, которые соединяет новосозданное ребро из одной из этих вершин, разумеется, будет достаточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 23:09 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsvесли речь только об интерактивной проверке, то проще и быстрее банально пускать волну Если речь идет о том, чтобы найти какой-нибудь цикл, то да. Но автору нужны все - и тут не соглашусь, и не быстрее, и не проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 23:13 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarer asvdfdsvесли речь только об интерактивной проверке, то проще и быстрее банально пускать волну Если речь идет о том, чтобы найти какой-нибудь цикл, то да. Но автору нужны все - и тут не соглашусь, и не быстрее, и не проще. ну если все, тогда лучше конечно действительно строить маршруты но опять же - на лету, имхо т.е. если есть условие интерактивной проверки, то я бы по-любому это использовал, сужая задачу до поиска циклов, проходящих через заданную вершину (например их которой исходит новое ребро), а не ваааааще всех на графе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 23:17 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsvну если все, тогда лучше конечно действительно строить маршруты но опять же - на лету, имхо Интуитивное "имхо" желательно бы подкреплять. Одного гигабайта оперативки - столько есть на любой современной рабочей станции - хватит, чтобы хранить матрицу связности графа примерно на 90'000 вершин. Также память нужна будет под уже найденные циклы итп - но порядок величин понятен. Сколько времени будет обсчитываться волна "из точки во все" на таком графе - довольно интересный вопрос. Заснуть, конечно, не успеешь, но вот получить ответ за комфортное для интерактивного режима время - далеко не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 23:52 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarerОдного гигабайта оперативки - столько есть на любой современной рабочей станции - хватит, чтобы хранить матрицу связности графа примерно на 90'000 вершин. мимо. 90к вершин орграфа без циклов может содержать, например, 600*(300 + 600 + 600^2 + 600^3 + ... + 600^299) ~ 7*10^827 маршрутов (300 блоков вида (1вершина -> 300 вершин -> 1 вершина) соединенных последовательно) кроме того. мелкая софтиночка с ориентированными графами на гигабайт... извините, неприемлемо, тоже имхо, но подкреплять не буду. softwarerСколько времени будет обсчитываться волна "из точки во все" на таком графе - довольно интересный вопрос. Заснуть, конечно, не успеешь, но вот получить ответ за комфортное для интерактивного режима время - далеко не факт. подкреплять будете или как?))) циклов в графе нет, все маршруты не превосходят по длине кол-ва вершин в графе, если при этом еще поколдовать над алгоритмом, учитывая точки "пересечения" маршрутов, то ваще шоколадно, но скорее всего и это не потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 00:08 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsv600*(300 + 600 + 600^2 + 600^3 + ... + 600^299) ~ 7*10^827 ха ошибочка, на несколько порядков больше))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 00:10 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsv90к вершин орграфа без циклов может содержать, например, 600*(300 + 600 + 600^2 + 600^3 + ... + 600^299) ~ 7*10^827 маршрутов Угу. Это оценка сверху. А оценка снизу? asvdfdsvмелкая софтиночка с ориентированными графами на гигабайт... извините, неприемлемо, тоже имхо, но подкреплять не буду. Не очень знаю, откуда Вы взяли мелкую софтиночку, но в любом случае имхо интересны эксплуатационные характеристики. Экономить ресурс, которого навалом - не всегда разумная позиция. Если ставить задачей эффективную работу с графами максимального размера, то совершенно истинна прозвучавшая мысль о том, что надо частично строить заранее, а дальше динамически. asvdfdsvподкреплять будете или как?))) Нет, не буду. Также как и с маршрутами, числа гуляют на многие порядки - вследствие собственно прямой зависимости от количества маршрутов. Можно воспользоваться Вашей оценкой, данной выше: если, допустим, в оптимистическом варианте Вам удастся дать ответ за 1 микросекунду, сколько времени займет поиск при пессимистическом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 00:52 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarer реттиВаще децсад. "уже имеем путь БА". И как мы узнаем что мы его, этот путь, "уже имеем"(или, уже "поимели")? Ваш вопрос показывает, что Вы либо не читали то, на что отвечаете, либо временно/постоянно не в состоянии воспринимать прочитанное. До тех пор, пока означенные факторы не изменятся, беседа вряд ли будет осмысленной. ой ну прямо ...... я подобной куйни нарешал воз и маленькую тележку. И мгновенно определяю кто в теме, а кто нет. А по существу я был абсолютно прав. Это ("уже имеем путь БА") звучит как насмешка. Вроде топикстартер ну ваще дебил. А тут все умные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 01:12 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Навеяло, http://acm.sgu.ru/problem.php?contest=0&problem=174 Ых, такие все умные. Пистец. Мне некуй доказывать. Я себя знаю. В софтверных конторах такого понимания самого себя хер получишь. Не совсем то, конечно ( не орграф ), но я выделяю компоненты и раком и боком, и волновым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 01:18 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Откуда ваще такие люди берутся? Вот пишет: поступило на вход ребро 33-456. Проверь, нет ли пути 456--33. Японский бох. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 01:38 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Замшелые сцуки & твари. Он даже не может понять другую сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 01:39 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Alexsalog softwarer FarusКто поможет: предложите алгорим определения цикличиеских ссылок на графе произвольного размера. Зависит от того, что именно Вам нужно. Найти все циклы во всех вариантах? Найти фундаментальные циклы? Определить факт наличия циклов без поиска самих циклов? Еще что-нибудь? И таки да, гугль содержит более чем достаточно информации на эту тему. Найти любые циклы, притом если граф строится итеративно - то сообщить об этом цикле и показать его в момент добавления решающего ребра. Т.е. ответить на вопрос присутствует ли в графе цикл или нет. Графы считаем связными. 1) Дерево это граф без циклов. Это определение 2) Граф является деревом тогда и только тогда когда количество вершин на одну больше количества ребер. Это есть такая теорема. Посчитайте ребра и вершины. Если строится итеративно, то и считайте итеративно, только следите за связностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 06:13 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
rettyЗамшелые сцуки & твари. Он даже не может понять другую сторону. А закусить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 12:00 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
c1272) Граф является деревом тогда и только тогда когда количество вершин на одну больше количества ребер. Это есть такая теорема. Это есть теорема только для связных неориентированных графов. Если заменить "на одну больше" на "на на количество областей связности больше", видимо, можно обобщить на любые неориентированные графы. А вот с ориентированными, боюсь, труба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2008, 12:13 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
softwarer c1272) Граф является деревом тогда и только тогда когда количество вершин на одну больше количества ребер. Это есть такая теорема. Это есть теорема только для связных неориентированных графов. Если заменить "на одну больше" на "на на количество областей связности больше", видимо, можно обобщить на любые неориентированные графы. Со связностью все понятно, обобщается легко. А вот с ориентированными, боюсь, труба. Дейкстра. Как побочный эффект находит циклы неотрицательной длины. Его сложность по-моему лучше чем O(N**2) и по ребрам и по вершинам, и нетребователен к памяти, так что вполне. Но думаю что есть лучшие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 08:55 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Собсно, Дейкстра -- это разновидность волнового алгоритма. Я вот тут накорябал. Только тяну не сумму стоимостей, а для каждой вершины тяну шлейф из множества вершин, из которых можно попасть в нее. Вроде бы работает. Например, trail[5] = {4, 7, 8, 9} значит что на каком-то этапе прохождения волны мы увидели что в вершину № 5 можно попасть из вершин №№ 4, 7, 8, 9. Эти хвосты, ес-но, будут расти и расти. Потом мы увидим, что проходя из вершины № 100 в вершину № 222, -- вершина № 222 входит в trail[100]. Т.е., обнаружен цикл. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 15:42 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Взял 95-вершинный орграф, с 3710 ребром; граф без циклов: по построению, все ребра идут от "меньшей" вершины к "большей". Добавил 5 искусственных ребер, образующих цикл. Получил ответ: Обнаружен цикл, проходящий через вершину № 33 (немного подправил код) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 17:00 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
asvdfdsv90к вершин орграфа без циклов может содержать, например,.. это да; если цикла/ов нет , то придется "ждать" , а если есть , то оно как-то быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 17:05 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Добавил нюанс. В первом примере вершины №№ 9, 10 и 11 образуют вот такой междусобойчик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. по которым прошла очередная волна. Т.е., идти вниз из № 9 к вершинам №№ 1 - 8 смысла нет никакого. Мы больше там ничего нового не нароем. Типа так. Может и ошибаюсь. На графе без циклов (95v3710e) получил ускорение ровно в 2 раза. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 18:51 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Вот нарыл: http://www.geocities.com/Vienna/7079/src/graph.txt Подсунул ему свой граф без циклов, обрезанный до 1000 ребер (там в комментах такое ограничение), но ответа 'No cycles' так и не дождался. Может оно затыкается на одиноких висячих вершинах. Я не разбирался. На 11-реберном графе ответ выдает какой надо. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. Кстати, сишный код читает "научный" формат ребер: "e 5 3", а не просто "5 3". Так что, если чего, то нужны поправки к коду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 21:57 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
А вот кстати вспомнил. МИПТовская задача: http://acm.mipt.ru/judge/problems.pl?problem=012 Похоже -- это наш сабж. Попробую сдать. Там питон в обойме языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2008, 22:36 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Продолбался как баран. Получил кучу runtime error. Пока не додумался обрезать свой код до предела. У них питон версии 2.1.3. Я это знал, но не думал, что 5.7 sets -- Unordered collections of unique elements New in version 2.3. ===== А built-in сет() появился еще позже. Короче, невезуха. Точнее, просто им плевать. Этакий ненавязчивый сервис под соусом широты души. Или, как грили в стране советов: вас много, а я одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 04:53 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
retty softwarer реттиВаще децсад. "уже имеем путь БА". И как мы узнаем что мы его, этот путь, "уже имеем"(или, уже "поимели")? Ваш вопрос показывает, что Вы либо не читали то, на что отвечаете, либо временно/постоянно не в состоянии воспринимать прочитанное. До тех пор, пока означенные факторы не изменятся, беседа вряд ли будет осмысленной. ой ну прямо ...... я подобной куйни нарешал воз и маленькую тележку. И мгновенно определяю кто в теме, а кто нет. А по существу я был абсолютно прав. Это ("уже имеем путь БА") звучит как насмешка. Вроде топикстартер ну ваще дебил. А тут все умные. Мне просто лень думать и кроме того дефицит общения :-) Я вот что придумал: "алгоритм реки" - название придумал сам (речь идет об ориентированном графе) : все вершины располагаются в некой таблице по старшинству. то есть если стрелочка направлена из вершины А в вершину В, то А "старше" B. И в таблице "потока" они будут располагаться так: Код: plaintext 1. 2. 3. Пусть теперь, из B выходит две стрелочки - одна в вершину С, а другая ИЗ вершины D. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. Как видим, если C станет "старше" D, то возникает цикл. Идуцируем обобщение (пытаемся): при вставке в указанную таблицу новой вершины, располагая её по правилу иерархии с "родительской" вершиной мы не должны обнаружить её же выше себя самой. И наоборот. Вообщем, вершина не должна быть в двух местах по иерархии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 10:48 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Что-то в этом есть. Если бы ребра поступали на вход без разрывов, так сказать. Например, так: 1 -> 2 -> 3 -> 4 -> 5 Мы бы помечали предков: № 1 - предков нет № 2 - № 1 № 3 - №№ 1, 2 № 4 - №№ 1, 2, 3 № 5 - №№ 1, 2, 3, 4 Теперь приходит ребро 5 -> 1. И мы сразу видим "противоречие": № 5 старше № 1, но № 1 входит в число его предков. Цикл. А если ребро 2 -> 3 придет "позже всех"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 18:43 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Глянул на свое решение вот этого http://www.spoj.pl/problems/PFDEP/ Топологическая сортировка, но с условием Your program can assume that there are no circular dependencies in the rules, i.e. no task depends directly or indirectly on itself. У меня там простейшая рекурсивная функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тем более не соображу можно ли сюда вставить проверку на зацикленность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 19:51 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
Поставил себе питон-модуль networkx https://networkx.lanl.gov/download/networkx/networkx-0.36.win32.exe Так он ацикличность моего графа на 3710 ребер определил в раз 110 быстрее моего ламерства. По времени выглядит так как будто ему неважно есть в графе циклы или нет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. И чиво там только нет: >>> import networkx as nx >>> dir(nx) ['DiGraph', 'Graph', 'LCF_graph', 'NetworkXError', 'NetworkXException', 'XDiGraph', 'XGraph', '__author__', '__builtins__', '__date__', '__doc__', '__file__', '__license__', '__name__', '__path__', '__version__', '_get_fh', 'adjlist', 'all_pairs_shortest_path', 'all_pairs_shortest_path_length', 'average_clustering', 'balanced_tree', 'barabasi_albert_graph', 'barbell_graph', 'betweenness_centrality', 'bidirectional_dijkstra', 'bidirectional_shortest_path', 'binomial_graph', 'brandes_betweenness_centrality', 'bull_graph', 'cartesian_product', 'center', 'centrality', 'chvatal_graph', 'circular_ladder_graph', 'cliques', 'cliques_containing_node', 'closeness_centrality', 'cluster', 'clustering', 'complement', 'complete_bipartite_graph', 'complete_graph', 'component', 'compose', 'configuration_model', 'connected_component_subgraphs', 'connected_components', 'connected_double_edge_swap', 'connected_smax_graph', 'convert', 'convert_node_labels_to_integers', 'convert_to_directed', 'convert_to_undirected', 'create_degree_sequence', 'create_empty_copy', 'cubical_graph', 'cumulative_distribution', 'cycle_graph', 'dag', 'degree', 'degree_centrality', 'degree_histogram', 'degree_sequence_tree', 'dense_gnm_random_graph', 'density', 'desargues_graph', 'dfs_postorder', 'dfs_predecessor', 'dfs_preorder', 'dfs_successor', 'dfs_tree', 'diameter', 'diamond_graph', 'digraph', 'dijkstra_path', 'dijkstra_path_length', 'dijkstra_predecessor_and_distance', 'discrete_sequence', 'disjoint_union', 'distance', 'dodecahedral_graph', 'dorogovtsev_goltsev_mendes_graph', 'double_edge_swap', 'drawing', 'eccentricity', 'edgelist', 'edges', 'edges_iter', 'empty_graph', 'erdos_renyi_graph', 'exception', 'expected_degree_graph', 'fast_gnp_random_graph', 'find_cliques', 'floyd_warshall', 'from_dict_of_dicts', 'from_dict_of_lists', 'from_numpy_matrix', 'from_scipy_sparse_matrix', 'from_whatever', 'frucht_graph', 'function', 'generators', 'gn_graph', 'gnc_graph', 'gnm_random_graph', 'gnp_random_graph', 'gnr_graph', 'gpickle', 'graph', 'graph_clique_number', 'graph_number_of_cliques', 'graphml', 'grid_2d_graph', 'grid_graph', 'havel_hakimi_graph', 'heapq', 'heawood_graph', 'house_graph', 'house_x_graph', 'hybrid', 'hypercube_graph', 'icosahedral_graph', 'info', 'is_connected', 'is_directed', 'is_directed_acyclic_graph', 'is_isomorphic', 'is_kl_connected', 'is_string_like', 'is_strongly_connected', 'is_valid_degree_sequence', 'isomorph', 'isomorphvf2', 'iterable', 'kl_connected_subgraph', 'kosaraju_strongly_connected_components', 'krackhardt_kite_graph', 'ladder_graph', 'leda', 'li_smax_graph', 'lollipop_graph', 'make_clique_bipartite', 'make_max_clique_graph', 'make_small_graph', 'math', 'moebius_kantor_graph', 'neighbors', 'networkx', 'newman_betweenness_centrality', 'newman_watts_strogatz_graph', 'node_clique_number', 'node_connected_component', 'nodes', 'nodes_iter', 'null_graph', 'number_connected_components', 'number_of_cliques', 'number_of_edges', 'number_of_nodes', 'number_strongly_connected_components', 'nx_yaml', 'octahedral_graph', 'operators', 'pappus_graph', 'pareto_sequence', 'parse_graph6', 'parse_graphml', 'parse_leda', 'parse_sparse6', 'path', 'path_graph', 'periphery', 'petersen_graph', 'powerlaw_cluster_graph', 'powerlaw_sequence', 'predecessor', 'radius', 'random', 'random_lobster', 'random_powerlaw_tree', 'random_powerlaw_tree_sequence', 'random_regular_graph', 'random_shell_graph', 'read_adjlist', 'read_edgelist', 'read_gpickle', 'read_graph6', 'read_graph6_list', 'read_graphml', 'read_leda', 'read_multiline_adjlist', 'read_sparse6', 'read_sparse6_list', 'read_yaml', 'readwrite', 'relabel_nodes', 'release', 's_metric', 'search', 'sedgewick_maze_graph', 'shortest_path', 'shortest_path_length', 'single_source_dijkstra', 'single_source_dijkstra_path', 'single_source_dijkstra_path_length', 'single_source_shortest_path', 'single_source_shortest_path_length', 'sparsegraph6', 'star_graph', 'strongly_connected_component_subgraphs', 'strongly_connected_components', 'strongly_connected_components_recursive', 'subgraph', 'test', 'tests', 'tetrahedral_graph', 'to_dict_of_dicts', 'to_dict_of_lists', 'to_numpy_matrix', 'to_scipy_sparse_matrix', 'topological_sort', 'topological_sort_recursive', 'transitivity', 'triangles', 'trivial_graph', 'truncated_cube_graph', 'truncated_tetrahedron_graph', 'tutte_graph', 'uniform_sequence', 'union', 'utils', 'watts_strogatz_graph', 'wheel_graph', 'write_adjlist', 'write_edgelist', 'write_gpickle', 'write_multiline_adjlist', 'write_yaml', 'xdigraph', 'xgraph'] >>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 01:12 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
вряд ли boost::graph или явавские библы менее богаты (если не более), в этом смысле; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 01:16 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
А вот как выглядит их реализация проверки на ацикличность: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 01:50 |
|
||
|
Алгоритм определения циклических ссылок
|
|||
|---|---|---|---|
|
#18+
AlexsalogЯ вот что придумал: "алгоритм реки" - название придумал сам (речь идет об ориентированном графе) : все вершины располагаются в некой таблице по старшинству. то есть если стрелочка направлена из вершины А в вершину В, то А "старше" B. И в таблице "потока" они будут располагаться так: Код: plaintext 1. 2. 3. Пусть теперь, из B выходит две стрелочки - одна в вершину С, а другая ИЗ вершины D. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. Как видим, если C станет "старше" D, то возникает цикл. Идуцируем обобщение (пытаемся): при вставке в указанную таблицу новой вершины , располагая её по правилу иерархии с "родительской" вершиной мы не должны обнаружить её же выше себя самой. И наоборот. Вообщем, вершина не должна быть в двух местах по иерархии. Я вообще-то пляшу от вставки нового ребра (неважно, появились ли после этой вставки новые вершины или нет), и в припадке ламеризьма накарябал код для интерактивного ввода ребер. Пусть и не эффективный (?). Все равно, я думаю, что даже это будет работать достаточно быстро (на своем файле я даже время не засекал -- ответ выдает мгновенно -- это же вам не питон). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 07:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1345282]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 449ms |

| 0 / 0 |
