Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.196.184] |
|
Страницы: (7) 1 2 [3] 4 5 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Под CodeWarior компилить не пробовал - по причине его отсутствия. А VC проглотил и не поперхнулся. Даже варнингом не плюнул. |
Сообщ.
#32
,
|
|
|
А если включить ему опцию "ISO C++ Template Parser", то и эту строку:
property_map<Graph, edge_weight_t>::type weights = get(edge_weight, graph); |
Сообщ.
#33
,
|
|
|
Цитата nvm @ Неужели этот алгоритм применим?! А как насчет таких входных данных: 4 4 2 0 1 1 1 1 2 0 8 1 3 10 1 3 1 0 1 Какой выдает ответ? Цитата 0 1 2 Цитата 0 1 2 Добавлено Пока получается, что да. Там цикличность исключается за счет пометки пройденных узлов (массив vertex_colors). Кроме того, глубина поиска уменьшается за счет того, что при первом достижении целевого узла запоминается полученное время (для последующего отбора путей), и если при последующей обработке еще на "полпути" получается время, превышающее ранее зафиксированное, то дальнейшая обработка этого пути прекращается. А это что?: Добавлено Цитата trainer @ Но по скорости имеет MSVC7.1 в 1.5 раза. Правда, и исполнимый файл во столько же раз больше. Кстати, замена в коде adjacency_list на adjacency_matrix понижает производительность примерно вдвое. Но это, впрочем, логично - на итераторы исходящих узлов сваливается гораздо больше работы. |
Сообщ.
#34
,
|
|
|
Цитата Flex Ferrum @ Цитата nvm @ Неужели этот алгоритм применим?! А как насчет таких входных данных: 4 4 2 0 1 1 1 1 2 0 8 1 3 10 1 3 1 0 1 Какой выдает ответ? Цитата 0 1 2 А правильный ответ 0 1 3 1 2, а во втором примере - 0 1 1 2. Так что алгоритм, как и ожидалось, неприменим, или требует радикальной модификации. Кстати, как ты приписываешь скорость дугам без ограничителя? |
Сообщ.
#35
,
|
|
|
Цитата nvm @ А правильный ответ 0 1 3 1 2, Гм. А ты прав, однако... Послушаем - что скажет Sazabis. Впрочем, эту проблему можно достаточно легко решить, если помечать не пройденные узлы, а пройденные ребра. Цитата nvm @ Кстати, как ты приписываешь скорость дугам без ограничителя? Как и сказано в условии - использую значение последнего "виденного" ограничителя. Добавлено nvm, обрати внимание: Т. е. дорог, исходящих и из перекрестка и входящих в него же быть не может, а значит твой пример №2 не соответствует условиям задачи. |
Сообщ.
#36
,
|
|
|
Пожалуй, начну реализовывать свой алгоритм. Он, правда, экспоненциальной трудоемкости и по памяти, как минимум, полиномиальный.. но других пока все равно нет.
-юсртыхэю Цитата Flex Ferrum @ nvm, обрати внимание: Т. е. дорог, исходящих и из перекрестка и входящих в него же быть не может, а значит твой пример №2 не соответствует условиям задачи. Здесь не сказано "два различных перекрестка", поэтому перекресток может соединяться сам с собой. Хотя .."ровно два перекрестка" - так как дорогу, соединяющую три перекрестка, представить трудно, то наверное имелось в виду как раз отсутствие петель. Но в математическом плане фраза совершенно пустая (т.е. петли не исключает), и за такие формулировки составителей нужно дисквалифицировать. |
Сообщ.
#37
,
|
|
|
Цитата Flex Ferrum @ Кроме того, глубина поиска уменьшается за счет того, что при первом достижении целевого узла запоминается полученное время (для последующего отбора путей), и если при последующей обработке еще на "полпути" получается время, превышающее ранее зафиксированное, то дальнейшая обработка этого пути прекращается. хмм.. А вы учитываете, что можно приехать на перекресток со скоростью, большей, чем в предыдущий раз, но с небольшим опозданием ? С отсутсвием ограничения скорости на некоторых перекрестках, вы придете к неверному ответу, в частном случае. |
Сообщ.
#38
,
|
|
|
Цитата Sazabis @ хмм.. А вы учитываете, что можно приехать на перекресток со скоростью, большей, чем в предыдущий раз, но с небольшим опозданием ? С отсутсвием ограничения скорости на некоторых перекрестках, вы придете к неверному ответу, в частном случае. Ты меня, видимо, не совсем правильно понял. Вот смотри. Предположим, есть два возможных пути из А в D: (A B D) и (A C D). Алгоритм первый раз прошел через узел B и, добравшись до D, получил время, положим 10. После этого, идя по второму варианту пути (через C) он уже на узле C получил время 10. Есть ли, в таком случае, смысл продолжать этот путь дальше, если ранее полученное время заведомо никак не улучшится? Расстояния, ведь, ненулевые, а потому за нулевое время их преодолеть никак нельзя. Добавлено Кстати, нет ли у тебя файликов побольше? |
Сообщ.
#39
,
|
|
|
дороги из А в А не будет/(из 1 в 1)/петли Теперь, что касаеться импровизированого теста, на раскрутку тела. Момент, конечно интересный, НО задача из серии дейкстры, так что, можно сказать, в каждой вершине достаточно побывать 1 раз. Можем внести это в условие, если хотите. Так же, сами подумайте, какого черта ехать набирать скорость в 3 перекресток а потом возвращаться ? У нас же с Вами не космическая программа по разгону спутников по орбите . В тестовых файлах такого не будет. |
Сообщ.
#40
,
|
|
|
Цитата Sazabis @ Теперь, что касаеться импровизированого теста, на раскрутку тела. Момент, конечно интересный, НО задача из серии дейкстры, так что, можно сказать, в каждой вершине достаточно побывать 1 раз. Можем внести это в условие, если хотите. Так же, сами подумайте, какого черта ехать набирать скорость в 3 перекресток а потом возвращаться ? У нас же с Вами не космическая программа по разгону спутников по орбите Поздняк метаться - я уже внес необходимые изменения в алгоритм . Правда после этого интересно будет посмотреть на производительность. Да и дейкстра тут далеко не в чистом виде. |
Сообщ.
#41
,
|
|
|
файлики побольше тестируйте.
Flex, проверь свой алгоритм на 2 архиве Прикреплённый файлtest1.zip (89.22 Кбайт, скачиваний: 159) |
Сообщ.
#43
,
|
|
|
Цитата Sazabis @ Теперь, что касаеться импровизированого теста, на раскрутку тела. Момент, конечно интересный, НО задача из серии дейкстры, так что, можно сказать, в каждой вершине достаточно побывать 1 раз. Можем внести это в условие, если хотите. Нехорошо принципиально менять условие задачи через два дня после того, как она сформулирована. Добавлено Я бы сказал, что менять условие - ни в какие ворота не лезет (когда время потрачено на исходную задачу). Поэтому либо оставляем прежнее условие, где оптимальное решение может проходить дважды не только через вершину, но и через одну дугу, либо меняем секунданта (вместе с задачей). |
Сообщ.
#44
,
|
|
|
Цитата nvm @ Нехорошо принципиально менять условие задачи через два дня после того, как она сформулирована. я ничего не менял! это ты сам придумал. Я уже сказал, что у меня нет таких тестовых данных, чтобы проверять кольца. Однако ресурсоемкость очень возрастет, так что, если хотите, можете включить в тесты свой вариант, и фиксить кольца. Только ОБА либо фиксят кольца, либо не фиксят. Выбирайте сами, я на Вас не давлю. |
Сообщ.
#45
,
|
|
|
Цитата Sazabis @ Только ОБА либо фиксят кольца, либо не фиксят. Выбирайте сами, я на Вас не давлю. Я ссылок на возможность присутствия колец в условии задачи не нашел. И второй момент - мне кажется, что сейчас решение задачи начинает уходить в русло поика оптимального алгоритма, что несколько не соответствует теме топика. Мне кажется (что по этому поводу думают остальные?), что детали наподобия колец и возможности возврата в данном случае не существенны. Естественно, это мое ИМХО. |