Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=9280116&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 07:52:48 2016
Кодировка: Windows-1251
[алгоритмическая задача] подсчитать количество достижимых вершин - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | 40 | 60 | 80 | показать все | след. страница
unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 12:35
1

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

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:25
-2

В треде спрашивается про алгоритм, а не про его реализацию. В результате сравнения реализаций алгоритма можно получить разве что стандартную таблицу значений - параметры входных данных - параметры выходных данных. И какие же выводы это позволит сделать в отношении алгоритмов?

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:26
2

Ну алгоритмы же мы тоже опишем. И оптимизации.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:27
-2

В ответ на:


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





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

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:28
5

Ты неправ. Это не задротство, а напротив, некоторая программистская мудрость. Вот как в соседнем треде обсуждают про printf vs stringstreams, так и здесь: если массив маленький, то писать асимптотически пиздатый qsort не надо.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:30
 

В ответ на:

Сначала ты предлагаешь разбивать на сильно связные компоненты и выдаешь это за решение, хотя никто не говорил, что эти компоненты большие и это сильно упростит задачу.



Во-первых, поскольку сложность операции линейная, это задачу точно не усложнит. А значит, это целесообразно. Во-вторых, это сразу позволяет свести задачу для произвольного графа к задаче для ациклического графа. Ну а в-третьих, пока еще никто в данном треде не предложил лучшего алгоритма.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:33
 

В данном случае (несколько миллионов вершин) играет роль именно асимптотическая сложность задачи.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:34
 

Ну неправда это. Никогда не влияет 'только асимптотическая сложность'. Нету у нас бесконечностей, нету. Асимптотика - это просто подсказка, как не считая все точно прикинуть время работы.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:35
 

Если алгоритм линейный, то разбиение на компоненты связности может замедлить работу в полтора-два раза. В зависимости от линейности двух частей алгоритма.
Ладно, я начинаю думать и писать, ты бы тоже написал, полезно будет.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:36
 

Quote:

Во-вторых, это сразу позволяет свести задачу для произвольного графа к задаче для ациклического графа


Это аргумент (пока индуктивный). Все остальное - нет.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:39
 

Первое и третье утверждения относятся вот к чему:
В ответ на:


Сначала ты предлагаешь разбивать на сильно связные компоненты и выдаешь это за решение, хотя никто не говорил, что эти компоненты большие и это сильно упростит задачу.





Решение было приведено ранее, вопрос в том, насколько оно хорошее. А разбиение на компоненты лишь потенциально может усложнить задачу в 2 раза, и только в том случае, если кто-то предложит линейный алгоритм, не использующий это разбиение. А этого пока никто не сделал.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 13:46
 

В ответ на:

Ладно, я начинаю думать и писать, ты бы тоже написал, полезно будет.



Предлагаю подумать, какова была бы сложность решения задачи, если изначально было бы известно, что граф ациклический. Ясно, что сложность решения для произвольного графа не меньше сложности решения для ациклического. А тут, мне кажется, все плохо. Не получается придумать линейный алгоритм, а только квадратичный. Если вершин у нас порядка 10^6, то операций будет порядка 10^12.

Grey_DeMonstr
Software Fiend

Рег.: 04.04.2005
Сообщений: 5517
Из: .
Рейтинг: 2400
  Re: Подскажите хороший алгоритм... [re: FMX]
      13.02.2010 13:52
 

Quote:

Не получается придумать линейный алгоритм, а только квадратичный.



Квадратичный алгоритм можно написать без заморочек: для каждой вершины делаем полный обход графа, выставляя флажки, и все.



У меня все работает. Что я делаю неправильно?
Сага об XYZ
unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: Grey_DeMonstr]
      13.02.2010 13:57
 

В общем случае решать неинтересно и лениво (но я попробую все равно, пусть будет).
Все-таки ты пояснишь, что там с двудольностью, циклами? Скажи уже все, что о нем знаешь наверняка.

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: Grey_DeMonstr]
      13.02.2010 13:58
 

Да, но такой алгоритм квадратичен всегда (сложность - "тета от N"), где N - число вершин.
А заморочки позволяют его сделать квадратичным лишь в самых плохих случаях.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: Grey_DeMonstr]
      13.02.2010 13:58
 

Это ты сказал V * (V + E), это чуть хуже, чем просто квадратично.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 14:00
 

А, ну кстати там, насколько я понимаю V почти равно E, даже не в два раза отличие. вот это странно.
Или там у тебя номера вершин как-то сильно раскиданы?

FMX
Математег

Рег.: 29.05.2006
Сообщений: 3744
Рейтинг: 1502
  Re: Подскажите хороший алгоритм... [re: unkulunkulu]
      13.02.2010 14:03
 

Например, можно считать, что сложность алгоритма O(E + V*N), где N - максимальное число "родителей" вершины ациклического графа. Например, если N = log V, то квадратичности может и не быть. В случае с ромбами, N будет порядка V (для листовых вершин), и суммарная сложность O(E + V^2).

DarkGrayМодератор
Carpal Tunnel

Рег.: 30.09.2002
Сообщений: 31410
Рейтинг: 8951
  Re: Подскажите хороший алгоритм... [re: Grey_DeMonstr]
      13.02.2010 14:26
1

в чем кстати смысл ребер в самих себя?

Grey_DeMonstr
Software Fiend

Рег.: 04.04.2005
Сообщений: 5517
Из: .
Рейтинг: 2400
  Re: Подскажите хороший алгоритм... [re: DarkGray]
      13.02.2010 17:45
 

Quote:

в чем кстати смысл ребер в самих себя?



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



У меня все работает. Что я делаю неправильно?
Сага об XYZ
Страницы: 0 | 20 | 40 | 60 | 80 | показать все | след. страница

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы
>>
Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в