0

Я внедрил Prim's algorithm в C (www.bubblellicious.es/prim.tar.gz), но мне просто интересно, как превратить это в Kruskal's algorithm.Как превратить алгоритм Прима в алгоритм Крускаля?

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

+1

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

+0

Ну, вы можете прочитать только основной файл, потому что нет необходимости смотреть на все файлы. – 2009-09-03 09:06:12

+2

IMHO эти алгоритмы не настолько похожи, что выгодно конвертировать из одного в другое - Prim требует некоторой очереди приоритетов, в то время как Kruskal использует глобальный отсортированный список ребер. Вам лучше начать с нуля. –

ответ

5

Почему бы не просто написать Kruskal с нуля и посмотреть, как они сравниваются в ваших собственных решениях? Лучший способ учиться.

1

Для преобразования вам нужен лес (т. Е. Набор деревьев, где первоначально каждый узел является деревом), как ваша временная структура вывода, а не одно дерево. Затем, на каждом шаге, вместо того, чтобы находить самую дешевую вершину, которая добавляет в данный момент не связанный узел, вы найдете самое дешевое ребро в графе и, если оно создает новое дерево (т. Е. Соединяет два ранее несвязанных узла), добавьте это дерево к леса и удалить исходные деревья. В противном случае отбросьте край. Правильная реализация Kruskal более интенсивна в памяти, но меньше времени, чем правильная реализация Prim.

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

Смежные вопросы