реализация алгоритма Крускала с использованием потоков

StackOverflow https://stackoverflow.com/questions/1856238

Вопрос

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

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

Это было полезно?

Решение

От Википедия

Исследования были сосредоточены на решении задачи о минимальном связующем дереве высокопараллельным способом.При линейном количестве процессоров проблему можно решить за O (logn) время.Статья 2003 года "Быстрые Алгоритмы с разделяемой памятью для вычислений минимальный охватывающий лес разреженных графов" Дэвида А.Бадер и Гоцзин Cong демонстрирует прагматичный алгоритм, который может вычислять MSTS в 5 раз быстрее на 8 процессорах, чем оптимизированный последовательный алгоритм.[9] Как правило, параллельные алгоритмы основаны на алгоритме Борувки—Прима и особенно алгоритме Крускала не масштабируются так хорошо для дополнительных процессоров.

Итак, вы могли бы ознакомиться с алгоритмом, упомянутым в этой статье, но Kruskal, вероятно, не выиграет от использования нескольких потоков.

Другие советы

Алгоритм Краскала для MST сложно распараллелить, поскольку он рассматривает ребра в строго заданном порядке.Вам следует взглянуть на Борувки алгоритм, который легче распараллелить, поскольку он может работать с каждым поддеревом частичного MST независимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top