Работа с массивными графиками - коммивояжёр - PullRequest
6 голосов
/ 08 января 2012

Я учу себя, как программировать алгоритмы, включающие TSP (Джикстра, Крускал), и я ищу совет для начинающих. Я работаю с C # и SQL. В идеале я хотел бы иметь возможность делать это строго в SQL, однако я не уверен, возможно ли это (я предполагаю, что время выполнения будет ужасным после 50 вершин).

Итак, я думаю, вопрос в том, могу ли я сделать это только на SQL, и если да, то какой подход лучше? Если нет, и я должен подключиться к C #, что будет лучшим подходом?

Ответы [ 3 ]

6 голосов
/ 08 января 2012

Рекомендуется выполнять простые вычисления в SQL, например, вычислять суммы.Суммы в SQL быстрее, потому что вместо всех записей возвращаются только суммы.Сложные алгоритмы, подобные тем, которые вы имеете в виду, должны быть реализованы в вашем коде на c #!Во-первых, язык SQL не подходит для таких проблем, во-вторых, он оптимизирован для доступа к БД, что делает его очень медленным для других типов использования.

Считывание ваших данных из БД с помощью SQL в соответствующую структуру данных вВаша программа на C #.Сделайте всю связанную с TSP логику там и, если хотите, сохраните результат в БД, когда закончите.

1 голос
/ 08 января 2012

Я собираюсь присоединиться к SQL.Хотя на самом деле это не был бы мой первый выбор для работы с TSP - он все же может легко делать такие вещи - при условии, конечно, что модель данных оптимальна для ваших усилий.

Первым делом будет определениемодель данных, которая содержит информацию, которая нужна вашему алгоритму, затем заполняется некоторыми примерами данных, а затем обрабатывает запрос, который может извлекать массивы по мере необходимости.

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

наконец, вы можете выбрать его на другом языке по вашему выбору.

1 голос
/ 08 января 2012

Ну, я не уверен, что SQL - лучший вариант для достижения этой цели, но вы можете попробовать использовать матрицу смежности для ввода. Многие опубликованные алгоритмы предназначены для такого рода ввода, и после этого единственной проблемой является размещение псевдокода в C #. Посмотрите, что это: http://en.wikipedia.org/wiki/Adjacency_matrix.

Вы бы использовали двумерный массив для представления матрицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...