You are on page 1of 7

THUẬT TOÁN PRIM

Khi ta có G là 1 đồ thị liên thông, có trong số, có n đỉnh


Bài toán đặt ra là : tìm cây khung ngắn nhất ( cây tối đại ngắn nhất, cây
bao trùm ngắn nhất, cây khung tối thiểu )

Ví dụ có 2 đồ thị dưới đây :


==> Hiểu đơn giản trong bài toán này một tập hợp các cạnh sao cho :
- phải đi qua tất cả các đỉnh
- tổng trọng số phải là nhỏ nhất

Thuật toán Prim :


 Ý tưởng :
- Ta sẽ chọn n-1 cạnh ( vì mỗi cạnh có 2 đỉnh ) tức là chọn hết n đỉnh
- Các cạnh được chọn phải thoả mãn yêu cầu :
+, mỗi cạnh sẽ có 2 đỉnh thì 1 đỉnh thuộc vào các đỉnh đã chọn , còn đỉnh
phía còn lại sẽ không được thuộc trong các đỉnh đã chọn
+, với điều kiện cạnh được chọn là phải có độ dài là bé nhất
 Các bước của thuật toán :
B1 : Nhập liệu các cạnh theo đồ thị
Dùng 2 vòng for lồng nhau , mỗi cạnh có 2 đỉnh ở 2 đầu , ta cho vòng for 1 để lưu các giá
trị của đỉnh bên trái , còn vòng for 2 để lưu giá trị cạnh bên phải, ta sẽ tảo ra các cạnh như
vd sau:
VD :
AB, AC, AD, AE, AF, BC, BD, BE, BF, CD, CE, CF, DE , DF, EF;
8 1 4 1 3 5 3 0 0 1 0 0 2 0 6

- Đặt 1 mảng tên TS để lưu lại trong số của các cạnh


- Đặt 2 mảng là Di và Dj để lưu các chữ số trái và phải của cạnh
B2 : Sắp xếp các cạnh theo chiều tăng dần ( sử dụng thuật toán quick-sort )
Khi thay đổi trọng số trong cạnh thì thay đổi luôn vị trí của các Di và Dj
Và loại bỏ các cạnh bằng 0 do 2 đỉnh của cạnh không nối trực tiếp với nhau

chỉ số 1 2 3 4 5 6 7 8 9 10
TS 1 1 1 2 3 3 4 5 6 8
Di A C A D B A A B E A
Dj E D C E D F D C F B
cạnh AE CD AC DE BD AF AD BC EF AB

B3 : xây dựng thuật toán

4 bài toán nhỏ hơn :


- 1. Tìm cây khung ngắn nhất bắt đầu từ 1 đỉnh
- 2. Tìm cây khung ngắn nhất bắt đầu từ 1 cạnh
- 3. Tìm cây khung ngắn nhất bắt đầu từ 1 đỉnh và không đi qua 1 cạnh nào đó có trọng
số
- 4. Tìm cây khung ngắn nhất bắt đầu từ 1 cạnh và không đi qua 1 cạnh nào đó có trọng
số
Bài toán 1. Tìm cây khung ngắn nhất bắt đầu từ 1 đỉnh
Ví dụ chọn đỉnh bất kì đỉnh C trong đồ thị có 6 đỉnh

Chỉ số 1 2 3 4 5 6 7 8 9 10
TS 1 1 1 2 3 3 4 5 6 8
Di A C A D B A A B E A
Dj E D C E D F D C F B
cạnh AE CD AC DE BD AF AD BC EF AB
thứ tự chọn 3 1 2 4 5
Các đỉnh C,D, C, D C,D,A C,D, C,D, kết
được chọn A, E, A, E, thúc
A,E
B B, F

Trọng số 3 1 2 6 9
Bài toán 2. Tìm cây khung ngắn nhất bắt đầu từ 1 cạnh
Ví dụ chọn đỉnh bất kì cạnh AE trong đồ thị có 6 đỉnh

Chỉ số 1 2 3 4 5 6 7 8 9 10
TS 1 1 1 2 3 3 4 5 6 8
Di A C A D B A A B E A
Dj E D C E D F D C F B
cạnh AE CD AC DE BD AF AD BC EF AB
thứ tự chọn 1 3 2 4 5
Các đỉnh A, E A,E, A,E,C A,E,C, C,D, kết
được chọn A, E, thúc
C,D D,B B, F

Trọng số 1 3 2 6 9
Bài toán 3. Tìm cây khung ngắn nhất bắt đầu từ 1 đỉnh và không đi qua 1 cạnh
Ví dụ : bắt đầu từ đỉnh B và kông đi qua cạnh BD

Chỉ số 1 2 3 4 5 6 7 8 9 10
TS 1 1 1 2 0 3 4 5 6 8
Di A C A D B A A B E A
Dj E D C E D F D C F B
cạnh AE CD AC DE BD AF AD BC EF AB
thứ tự chọn 4 2 3 5 1
Các đỉnh B,C,D, B ,C,D B,C, B,C,D, B,C
được chọn
A,E D,A A,E,F

Trọng số 8 6 7 11 5
Bài toán 4. Tìm cây khung ngắn nhất bắt đầu từ 1 cạnh và không đi qua 1 cạnh
Ví dụ : bắt đầu từ cạnh AF và không đi qua cạnh AE

Chỉ số 1 2 3 4 5 6 7 8 9 10
TS 0 1 1 2 3 3 4 5 6 8
Di A C A D B A A B E A
Dj E D C E D F D C F B
cạnh AE CD AC DE BD AF AD BC EF AB
thứ tự chọn 3 2 4 1
Các đỉnh A,F, A,F,C A,F,C, A,F,C A,F
được chọn ,
C,D D,E
D,E,B
Trọng số 5 4 7 10 3

You might also like