|
Как задать граф на языке C#? | ☑ | ||
---|---|---|---|---|
0
batmansoft
01.12.13
✎
11:37
|
Подскажите пожалуйста, каким способом лучше всего задать граф на языке программирования C# для целей реализации алгоритма топологической сортировки?
|
|||
1
kot_bcc
01.12.13
✎
12:05
|
Обычно это зависит от текущего способа представления графа. Самый простой способ - массив узлов с доп. свойством. Впрочем, если такие вопросы не решаются на ходу - имеет смысл воспользоваться готовыми решениями.
|
|||
2
zak555
01.12.13
✎
12:07
|
нужны входные данные
|
|||
3
xenos
01.12.13
✎
12:12
|
Двумерный массив
|
|||
4
batmansoft
01.12.13
✎
12:15
|
(3) двумерный массив - это как? Квадратная матрица, где по горизонтали это вершины, а по вертикали это в какую вершину ведут ребра из этой вершины? Я правильно понял?
|
|||
5
sda553
01.12.13
✎
12:17
|
структура описывающая узел, в ней вектор с указателями на другие узлы. Дополнительно в структуру можно добавлять другие данные необходимые для описания узла или расчетов
|
|||
6
Asmody
01.12.13
✎
12:23
|
Лабораторка, 3й курс
|
|||
7
GANR
01.12.13
✎
12:48
|
(3) Если вершин более 40000 сколько оперативной памяти сожрет такой массив??? КРОКовский сервер рухнет - не то что хиленькй домашний ПК. (6) +1. Это в лабораторках на 3-м курсе так можно делать, а не в реальных задачах.
В 1С, к примеру, можно задействовать Соответствие/Структура, которое будет в качестве ключа использовать идентификатор вершины (ГУИД, Ссылка и т. д.) + каждая вершина будет содержать массив узлов, на которые эта вершина имеет выходы. В Си-Шарп явно есть аналоги этих коллекций в 1С. |
|||
8
sda553
01.12.13
✎
13:15
|
map аналог соответствие
struct аналог структуры |
|||
9
Ненавижу 1С
гуру
02.12.13
✎
09:42
|
(8) map имхо в java, в шарпе это Dictionary
|
|||
10
dk
02.12.13
✎
09:44
|
графы тоже разные бывают
направленный или нет? |
|||
11
dk
02.12.13
✎
09:46
|
с весами или без
|
|||
12
Cerera
02.12.13
✎
09:49
|
(0)В виде матрицы смежности, либо в виде списка рёбер
|
|||
13
Михаил Козлов
02.12.13
✎
11:16
|
Я (правда в Паскале, давно) для алгоритма Мака задавал граф в виде списка дуг. Потом по этому списку формировал массив вершин с количееством входящих дуг - для последующего поиска очередной "топологически" подходящей вершины.
На выходе получался топологически упорядоченный список дуг, или список дуг, содержащий цикл(ы). Где-то валялась реализация и на 1С. Если нужно - пишите на мыло (в профиле) - поищу. |
|||
14
badboychik
02.12.13
✎
11:20
|
(7) Алгоритмы обработки графов оперируют двумерными массивами, при 40к элементов это всего 1.6 ГБ данных, не надо никаких структур и соответствий
|
|||
15
Михаил Козлов
02.12.13
✎
11:23
|
(14) "Алгоритмы обработки графов оперируют двумерными массивами" - совсем необязательно.
|
|||
16
kot_bcc
02.12.13
✎
11:30
|
+(15) Мало того, что необязательно. Задача сортировки, как правило, предшествует более тяжёлым (в смысле вычислительной сложности) задачам, так что при выборе способа представления лучше ориентироваться именно на проблемы последующих задач. Если это, конечно, не лабы.
|
|||
17
badboychik
02.12.13
✎
12:09
|
(16) Поиск кратчайших путей работает на двумерном массиве, по универу помню
|
|||
18
badboychik
02.12.13
✎
12:16
|
Топологическая сортировка графа
Описание и реализация алгоритма http://rain.ifmo.ru/cat/view.php/vis/graph-general/topological-sort-2007/algorithm все уже разжевано, в чем проблема то? |
|||
19
GANR
02.12.13
✎
14:51
|
(14) Пусть для 40000 вершин хватит памяти, а если число вершин увеличить в 2 раза, то кол-во памяти нужно в 4(!) раза больше, в 4 - в 16(!) раз. То есть ОП отжирается пропроционально КВАДРАТУ числа вершин.
(17) Ну да ладно, предположим ОП нам хватает, а если попробовать засечь средствами отладки как растет количество проверок несуществующих связей между вершинами??? Насколько я помню, по теории алгоритмов если что-то растет пропорционально квадрату числа объектов (оперативная память, кол-во проверок/присваиваний), то это уже не очень хороший алгоритм. |
|||
20
Михаил Козлов
02.12.13
✎
17:16
|
(19) Например, "классические" методы решения систем линейных уравнений: как N^3. Но для систем общего вида лучше, можно сказать, нет.
Если граф "сильно" заполнен, все равно получите N^2. Здесь речь о том, что представлять граф в виде матрицы смежности в случае разреженного графа неэкономно. По-моему, экономнее списка дуг трудно что-нибудь придумать. |
|||
21
GANR
02.12.13
✎
17:30
|
(20) А часты ли на практике ситуации, при которых в огромных графах порядка нескольких десятков тысяч элементов, связан практически "каждый с каждым"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |