Случайные остовные деревья двудольных графов - PullRequest
2 голосов
/ 29 марта 2012

Я работаю над созданием некоторого кода с использованием метаэвристики для нахождения хороших решений проблемы транспортировки с фиксированной зарядкой (FCTP).

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

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

IУ меня возникли некоторые трудности с этим.Подход, который я использовал до сих пор, состоит в том, чтобы сделать случайную перестановку дуг, затем выполнить итерацию по этому списку, последовательно помещая их в основу, если это не создаст цикл.

Мне нужно найтибыстрый метод проверки, если включение дуги создаст цикл.Я не хочу «грубой силы», поскольку этот подход может занять много времени, учитывая большие проблемы.

Учитывая, что A - это массив со случайной перестановкой дуг,как бы вы пошли делать процедуру выбора?

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

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Алгоритм Крускала используется для нахождения минимального остовного дерева.Обнаружение быстрого цикла на самом деле не является частью алгоритма Крускала.Алгоритм будет работать со структурой данных, которая способна находить циклы как быстро, так и с медленной наивной попыткой (однако сложность будет другой).

Однако алгоритм Крускала здесь на ходу, поскольку он обычно используеттак называемая структура данных объединения-поиска или несвязанного набора для быстрого обнаружения циклов.Это часть страницы Алгоритма Крускала в Википедии, которая понадобится вам для вашего алгоритма.Это также связано в Википедии: http://en.wikipedia.org/wiki/Disjoint-set_data_structure

2 голосов
/ 29 марта 2012

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

...