How can the use of proper data structures improve the efficiency of algorithms like Prim's and Kruskal's in PHP?

Proper data structures such as priority queues or disjoint-set data structures can significantly improve the efficiency of algorithms like Prim's and Kruskal's by optimizing the operations involved in finding the minimum spanning tree. These data structures help in efficiently selecting and merging the edges with the minimum weight, reducing the overall time complexity of the algorithms.

// Example of using a priority queue for Prim's algorithm in PHP

class PriorityQueue extends SplPriorityQueue {
    public function compare($priority1, $priority2) {
        return $priority1 <=> $priority2;
    }
}

function prim($graph) {
    $priorityQueue = new PriorityQueue();
    $mst = [];
    $visited = [];

    // Start with the first vertex
    $priorityQueue->insert(0, 0);

    while (!$priorityQueue->isEmpty()) {
        $vertex = $priorityQueue->extract();
        $visited[$vertex] = true;

        foreach ($graph[$vertex] as $neighbor => $weight) {
            if (!isset($visited[$neighbor])) {
                $priorityQueue->insert($neighbor, $weight);
                $mst[] = [$vertex, $neighbor, $weight];
            }
        }
    }

    return $mst;
}

// Usage
$graph = [
    0 => [1 => 2, 2 => 4],
    1 => [0 => 2, 2 => 1, 3 => 3],
    2 => [0 => 4, 1 => 1, 3 => 5],
    3 => [1 => 3, 2 => 5]
];

$minimumSpanningTree = prim($graph);
print_r($minimumSpanningTree);