Thuật toán Prim

Một phần của tài liệu một số vấn đề ứng dụng của đồ thị trong tin học (Trang 78)

II. Cây bao trùm

3.2.2Thuật toán Prim

2. Các thuật toán tìm cây bao trùm

3.2.2Thuật toán Prim

Thuật toán Prim còn được gọi là phương pháp lân cận gần nhất. Trong phương pháp này, bắt đầu từ một đỉnh s tuỳ ý của đồ thị, đầu tiên ta nối s với đỉnh lân cận gần nó nhất, chẳng hạn là đỉnh y. Nghĩa là trong số các cạnh kề của đỉnh s, cạnh (s, y) có độ dài nhỏ nhất. Tiếp theo, trong số các cạnh kề với 2 đỉnh s hoặc y ta tìm cạnh có độ dài nhỏ nhất, cạnh này dẫn đến đỉnh thứ ba z, và ta thu được cây bộ phận gồm 3 đỉnh và 2 cạnh. Quá trình này sẽ được tiếp tục cho tới khi ta thu được được cây gồm n đỉnh và n - 1 cạnh, cây đó cũng là cây bao trùm nhỏ nhất cần tìm. Các bước thuật toán như sau:

- Bước 1: Chọn u1 sao cho l(u1) = min{l(u)} với u ẻ U đặt U1 = {u1}

- Bước 2: Chọn u2 sao cho l(u2) = min{l(u)} với u ẻ U\U1 và u kề với 1 cạnh thuộc U1

...

- Bước k +1: Giả sử đã có Uk = {u1, u2, ..., uk}

Chọn uk + 1 sao cho l(uk+1) = min{l(u)} với u ẻ U\Uk và u kề với 1 cạnh thuộc Uk.

Với thuật toán Prim, cạnh mới được chọn cũng phải không lập thành chu trình với các cạnh đã chọn ở các bước trước.

Thuật toán dừng ở bước n - 1.

Kết luận: cây T = <X, Un-1> là cây bao trùm ngắn nhất của G.

* Về hình thức thuật toán Prim phức tạp hơn thuật toán Kruskal nhưng về khối lượng tính toán sẽ giảm đi rất nhiều lần. Bởi vì thuật toán Prim chỉ cần xét các cạnh kề với các cạnh đã được chọn, còn trong thuật toán Kruskal phải xem xét tất cả các cạnh còn lại của đồ thị. Chính vì thế thuật toán Prim tỏ ra hiệu quả hơn, còn thuật toán Kruskal phải tính toán nhiều nên làm việc kém hiệu quả đối với những đồ thị có số cạnh lớn.

Một phần của tài liệu một số vấn đề ứng dụng của đồ thị trong tin học (Trang 78)