Форум сайта python.su
AnnaLischenНе, вот там путь X2-X3, из-за вершины X8 он отрезается от всего графа. Зачем по нему вести поиск (во все стороны) для заданой в нём вершины, если он отрезан от циклов?
да, можно по очереди удалять те вершины и рёбра, которые соединены последовательно, но к циклу может быть привязан ещё какой-то “хвост” с другой стороны цикла
AnnaLischenПотому что всё сводится к обработке маленького двумерного массива.
Почему лучше?
AnnaLischenТам, по-моему, на уровне алгоритма затык, потому как и блок-схема запутанная, и код, написанный по ней.
А вы можете сказать что-то по моему коду? Я бы очень хотела именно его отладить.
kamisamaВообще, там можно и рёбра цикла пометить весом, и создать ряд отображений (исходный граф, оптимизированный). И всё это будет занимать памяти меньше, чем у неё сейчас занято.
py.user.next говорит о матрице, но он это кажется неправильно говорит. Для матрицы алгоритм будет сложнее
Офлайн
kamisama
Ах да, путь. А по остальным вопросам?С путем такой же вопрос почти: другими словами надо найти путь между вершиной графа A и циклическим графом B, являющимся подграфом графа A, да? Если вершина находится в графе B, то путь будет равен нулю (пустому списку)?Или, как вы уже говорите, надо найти до любого ближайшего цикла?Граф же статически задается, что подразумевается под словом “соединить”?
Офлайн
AnnaLischen
Не, вот там путь X2-X3, из-за вершины X8 он отрезается от всего графа. Зачем по нему вести поиск (во все стороны) для заданой в нём вершины, если он отрезан от циклов?
Офлайн
kamisamaЯ с этим не согласна совершенно. Опыт - сын ошибок трудных, все на чём-то учатся и разбор ошибок и их исправление тоже очень полезны для всего процесса.
А твой код лучше выкинуть и забыть как страшный сон.
kamisamaНо то как оптимизировать код писать его лучше, интересует меня никак не меньше. Если можете показать что-то конкретное, практическое, то будет совсем чудесно, потому что тогда будет понятнее.
Такой записью намного проще делать рекурсивный обход
kamisamaЯ постралась ответить, как мне казалось. Но напишу ещё раз:
Нужна еще постановка задачи в строгом виде — что дано и что найти.
Офлайн
AnnaLischenВ итоге код впустую работает на множестве путей, которые сразу можно отрезать, ещё до поиска.
Если бы у меня был один граф, такого вопроса бы не возникло, но там несколько тысяч.
Отредактировано py.user.next (Апрель 29, 2015 11:52:45)
Офлайн
AnnaLischenВсе равно не понятно полностью(
Что надо - получить новые графы, состоящие из циклов и разрешённых вершин, при условии, что последние связаны с циклами либо напрямую, либо через другие разрешённые вершины, либо сами входят в состав цикла. Результат: цикл + вершины/а, в случае вершины в цикле это будет просто вершина, в остальных - цикл и набор вершин (от 1 до n, но все должны быть разрешёнными, в противном случае, цепочка обрывается)
AnnaLischenНе, я имел в виду, что там весь код надо менять, ибо в той функции слишком много вложенных условий, циклов и рекурсии с сайд-эффектами. Такое слишком трудно воспринимать для человека. И писать, наверное, было больно.
Я с этим не согласна совершенно. Опыт - сын ошибок трудных, все на чём-то учатся и разбор ошибок и их исправление тоже очень полезны для всего процесса.
Отредактировано kamisama (Апрель 29, 2015 18:06:58)
Офлайн
kamisamaС одной стороны да, с другой - не знала/знаю как иначе, пока учусь, поэтому выжимала из себя то, что уже научилась понимать-соображать.
И писать, наверное, было больно.
kamisamaНа первом этапе совпадают, потом, когда я, например, соединяю вершину F с циклом A,B,C,E,D через вершины G и N (картинка), но затем, определив что следующая вершина - G - она в рекурсии встанет в item, mainItemOfConnection - const, то есть для этого примера всегда F.
item и mainItemOfConnection
Офлайн
AnnaLischen
постарайтесь плз)
“Список предыдущих предыдущих вершин”, “вершина с которой все началось”, “список циклов” это часть реализации вашего алгоритма. А нужны только главные параметры задачи. Мне кажется там будет только исходная вершина и список разрешенных вершин будет. А от нее уже там искать подграфы.
Еще про общепринятую терминологию не забывайте Например, “соединять”. Граф ведь похоже константный. Вершины уже все соединены (имеют связи).
Офлайн
AnnaLischenОн должен туда сходить и, если там нет цикла, вернуть пустоту. А если вернулась пустота, то должен в другую сторону идти. (Могут же быть циклы не только с одной, но и с обеих сторон.)
Кстати, я нашла ещё одну проблему:
…
то есть чтобы поиск не уходил в сторону соседа F
Отредактировано py.user.next (Апрель 29, 2015 22:53:00)
Офлайн
py.user.next
Вам эта задача понятна?) Может это я только тут тугодумлю
Офлайн