Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.fds-net.ru/showflat.php?Number=9280120&src=arc&showlite=l
Дата изменения: Unknown Дата индексирования: Tue Feb 26 22:09:56 2013 Кодировка: Windows-1251 |
Technical
>> Development (Archive)
Страницы: 0 | 20 | 40 | (43) | 60 | 80 | показать все | след. страница | ||
FMX : Re: Подскажите хороший алгоритм...
[re:unkulunkulu] 13.02.2010 13:27 | Reply | Edit | | -2 | |
В ответ на: Это как раз то, о чем я и говорил. Случайная реализация алгоритма не позволяет судить о самих алгоритмах. То, что предлагается меряться скоростью - это чистой воды задротство. | ||
unkulunkulu
[re:FMX] 13.02.2010 13:28 | Reply | Edit | | 5 | |
Ты неправ. Это не задротство, а напротив, некоторая программистская мудрость. Вот как в соседнем треде обсуждают про printf vs stringstreams, так и здесь: если массив маленький, то писать асимптотически пиздатый qsort не надо. | ||
FMX
[re:unkulunkulu] 13.02.2010 13:30 | Reply | Edit | | 0 | |
В ответ на: Во-первых, поскольку сложность операции линейная, это задачу точно не усложнит. А значит, это целесообразно. Во-вторых, это сразу позволяет свести задачу для произвольного графа к задаче для ациклического графа. Ну а в-третьих, пока еще никто в данном треде не предложил лучшего алгоритма. | ||
FMX
[re:unkulunkulu] 13.02.2010 13:33 | Reply | Edit | | 0 | |
В данном случае (несколько миллионов вершин) играет роль именно асимптотическая сложность задачи. | ||
unkulunkulu
[re:FMX] 13.02.2010 13:34 | Reply | Edit | | 0 | |
Ну неправда это. Никогда не влияет 'только асимптотическая сложность'. Нету у нас бесконечностей, нету. Асимптотика - это просто подсказка, как не считая все точно прикинуть время работы. | ||
unkulunkulu
[re:FMX] 13.02.2010 13:35 | Reply | Edit | | 0 | |
Если алгоритм линейный, то разбиение на компоненты связности может замедлить работу в полтора-два раза. В зависимости от линейности двух частей алгоритма. Ладно, я начинаю думать и писать, ты бы тоже написал, полезно будет. | ||
unkulunkulu
[re:FMX] 13.02.2010 13:36 | Reply | Edit | | 0 | |
Quote:Это аргумент (пока индуктивный). Все остальное - нет. | ||
FMX
[re:unkulunkulu] 13.02.2010 13:39 | Reply | Edit | | 0 | |
Первое и третье утверждения относятся вот к чему:В ответ на: Решение было приведено ранее, вопрос в том, насколько оно хорошее. А разбиение на компоненты лишь потенциально может усложнить задачу в 2 раза, и только в том случае, если кто-то предложит линейный алгоритм, не использующий это разбиение. А этого пока никто не сделал. | ||
FMX
[re:unkulunkulu] 13.02.2010 13:46 | Reply | Edit | | 0 | |
В ответ на: Предлагаю подумать, какова была бы сложность решения задачи, если изначально было бы известно, что граф ациклический. Ясно, что сложность решения для произвольного графа не меньше сложности решения для ациклического. А тут, мне кажется, все плохо. Не получается придумать линейный алгоритм, а только квадратичный. Если вершин у нас порядка 10^6, то операций будет порядка 10^12. | ||
Grey_DeMonstr
[re:FMX] 13.02.2010 13:52 | Reply | Edit | | 0 | |
Quote: Квадратичный алгоритм можно написать без заморочек: для каждой вершины делаем полный обход графа, выставляя флажки, и все. | ||
unkulunkulu
[re:Grey_DeMonstr] 13.02.2010 13:57 | Reply | Edit | | 0 | |
В общем случае решать неинтересно и лениво (но я попробую все равно, пусть будет). Все-таки ты пояснишь, что там с двудольностью, циклами? Скажи уже все, что о нем знаешь наверняка. | ||
FMX
[re:Grey_DeMonstr] 13.02.2010 13:58 | Reply | Edit | | 0 | |
Да, но такой алгоритм квадратичен всегда (сложность - "тета от N"), где N - число вершин. А заморочки позволяют его сделать квадратичным лишь в самых плохих случаях. | ||
unkulunkulu
[re:Grey_DeMonstr] 13.02.2010 13:58 | Reply | Edit | | 0 | |
Это ты сказал V * (V + E), это чуть хуже, чем просто квадратично. | ||
unkulunkulu
[re:unkulunkulu] 13.02.2010 14:00 | Reply | Edit | | 0 | |
А, ну кстати там, насколько я понимаю V почти равно E, даже не в два раза отличие. вот это странно. Или там у тебя номера вершин как-то сильно раскиданы? | ||
FMX
[re:unkulunkulu] 13.02.2010 14:03 | Reply | Edit | | 0 | |
Например, можно считать, что сложность алгоритма O(E + V*N), где N - максимальное число "родителей" вершины ациклического графа. Например, если N = log V, то квадратичности может и не быть. В случае с ромбами, N будет порядка V (для листовых вершин), и суммарная сложность O(E + V^2). | ||
DarkGray
[re:Grey_DeMonstr] 13.02.2010 14:26 | Reply | Edit | | 1 | |
в чем кстати смысл ребер в самих себя? | ||
Grey_DeMonstr
[re:DarkGray] 13.02.2010 17:45 | Reply | Edit | | 0 | |
Quote: А такие есть? Вообще-то не должно быть. Граф совершенно точно двудольный. Про циклы четной длины - мой косяк, конечно же. Циклы могут быть. V примерно равно E, тоже правда. | ||
DarkGray
[re:Grey_DeMonstr] 13.02.2010 17:48 | Reply | Edit | | 0 | |
Quote: первая же строчка 00000002 00000002 | ||
unkulunkulu
[re:Grey_DeMonstr] 13.02.2010 17:58 | Reply | Edit | | 0 | |
Ну скажи, что за графы, пожалуйста! У тебя же нарисован непростой граф, там треугольник такой длинный. Где там двудольность, тоже не совсем понятно. Ладно, граф двудольный. Т.е. постановка такая: в двудольном графе тарам пам-пам, так? В общем виде действительно ничего хорошего не выйдет походу. | ||
DarkGray
[re:unkulunkulu] 13.02.2010 18:02 | Reply | Edit | | 0 | |
Quote: его пример халявным алгоритмом где-то за минуту обсчитывается | ||
Top | след. страница |