Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=9280120&src=arc&showlite=l
Дата изменения: Unknown
Дата индексирования: Tue Feb 26 22:09:56 2013
Кодировка: Windows-1251
[алгоритмическая задача] подсчитать количество достижимых вершин - Public forum of MSU united student networks
Technical >> Development (Archive)

Страницы: 0 | 20 | 40 | (43) | 60 | 80 | показать все | след. страница
FMX : Re: Подскажите хороший алгоритм...  [re:unkulunkulu]   13.02.2010 13:27    | Reply | Edit |
-2
В ответ на:


Ну вот, кстати, о сортировках и их реализациях. Недавно проспорил другу пивасик, не смог написать qsort, который работает быстрее вставок на случайном массиве длины 100. Хотя оптимизации он мне разрешил юзать разные, например, короткие массивы (до 8ми) я сортировал его же функцией :grin:





Это как раз то, о чем я и говорил. Случайная реализация алгоритма не позволяет судить о самих алгоритмах. То, что предлагается меряться скоростью - это чистой воды задротство.

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:

А такие есть? Вообще-то не должно быть. Граф совершенно точно двудольный. Про циклы четной длины - мой косяк, конечно же. Циклы могут быть. V примерно равно E, тоже правда.




первая же строчка
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 | след. страница