В реализации Java алгоритма Крускала, где именно мы должны выполнить Path Compression?
При реализации алгоритма Крускала в Java с использованием наборов Disjoint следует ли называть сжатие пути отдельной функцией или она должна быть неотъемлемой частью функции find()?
1 ответ
Решение
Сжатие пути и другие оптимизации, такие как объединение по рангу, должны применяться каждый раз, когда вы вызываете find
операция над вашим непересекающимся лесом.
Один из способов увидеть это: с точки зрения алгоритма Крускала, вам просто нужно уметь вызывать find
а также union
и пусть они работают правильно. Вам не нужно беспокоиться о деталях того, как вы делаете find
а также union
работать правильно, только то, что они делают. Ответственность за то, чтобы все работало быстро, лежит на несвязанном наборе леса, поэтому find
где вы увидите сжатие происходит.