Professional Documents
Culture Documents
ôn tập
ôn tập
ôn tập
Tập hợp
Chỉnh hợp lặp
Chỉnh hợp lặp chập k của tập n phần tử là một cách sắp xếp có thứ tự k phần tử lấy từ tập
gồm n phần tử đã cho, mỗi phần tử có thể được lấy lặp lại.
Ví dụ 1: Tập A={a, b, c}
Có thể đặt bao nhiêu tên biến có độ dài 4 ký tự.
Giải: Mối tên biến có 4 ký tự được chọn từ tập A là một bộ 4 phần tử được lấy từ tập A. Vậy
có số tên biến có 4 ký tự được chọn từ A là N(A) x N(A) x N(A) x N(A) = 3 x 3 x 3 x 3=81
Ta có công thức tính chỉnh hợp lặp chập k từ n phần tử là:
Ank
= nk
Chỉnh hợp không lặp
Chỉnh hợp không lặp chập k của tập n phần tử ( gọi tắt là chỉnh hợp chập k) là một cách sắp
xếp có thứ tự k phần tử lấy từ tập gồm n phần tử đã cho, mỗi phần tử không được lấy lặp lại.
Ví dụ 3: Tập A= {1, 2, 3, 4, 5} các bộ (2, 3,5); (2, 5, 3) là các chỉnh hợp không lặp chập 3 từ
5 phần tử, còn các bộ (1, 1, 2);(1, 2, 1) và (2, 3, 2) không phải là chỉnh hợp không lặp chập 3 từ 5
phần tử, đó là chỉnh hợp lặp chập 3 từ 5 phần tử.
Ta có công thức tính chỉnh hợp không lặp chập k từ n phần tử là:
n!
Pkn (n−k )!
=
Hoán vị
Hoán vị của n phần tử khác nhau là một cách sắp xếp có thứ tự n phần từ đó.
Ví dụ 7: Có 4 người rủ nhau đi chụp ảnh là anh, Bắc, Cúc, Dương. Hãy tính xem có bao
nhiêu kiểu ảnh chụp mà cả 4 người đứng thành một hàng.
Giải: Đầu tiên ta có 4 khả năng chọn người đứng bên trái cùng, sau khi chọn người đứng trái
ta có 3 khả năng chọn người đứng kế theo, tiếp đó chỉ có thể chọn được 2 khả năng người còn
lại, như vậy ta có số kiểu ảnh có thể chụp khác nhau về vị trí đứng là 4.3.2.1=4!= 24 kiểu.
Ta có công thức tính số hoán vị của n phần tử là:
Pn = n!
Tổ hợp
Tổ hợp chập k từ n phần tử là cách chọn không phân biệt thứ tự k phần tử lấy từ tập n phần
tử đã cho, mỗi phần tử không được lấy lặp lại.
Ví dụ 2: Có 5 sinh viên là Anh, Bắc, Cúc, Dương, Giang của khoa CNTT. Chủ nhiệm khoa
muốn chọn để thành lập một tổ 3 người để thực hiện một đề tài khoa học. hỏi có bao nhiêu
phương án để thành lập tổ 3 người đó?
Giải: Ta ký hiệu tên của các sinh viên là A, B, C, D, G. Các phương án thành lập tổ có thể là tổ
hợp chập 3 của 5 phần tử đó. Cụ thể là:
C kn
là số tổ hợp chập k của n phần tử, ta có công thức sau:
n!
C kn (n−k )!k!
=
Tổ hợp lặp
Tổ hợp chập k từ n phần tử là cách chọn không phân biệt thứ tự k phần tử lấy từ tập n phần
tử đã cho, mỗi phần tử có thể được lấy lặp lại.
( n+ k−1 )!
Rkn =
k!( n−1) !
Ví dụ : Có bao nhiêu cách chọn 4 tờ giấy bạc từ một két đựng tiền gồm những tờ 2, 5, 10,
20, 50 và tờ 100 ngàn đồng, nếu thứ tự mà các tờ tiền được chọn ra là không quan trọng, các tờ
tiền cùng loại là không phân biệt và mỗi loại có ít nhất 4 tờ.
( 6+ 4-1) !
R64 = =126
4! ( 6-1) !
Nguyên lý cộng
Giả sử có hai công việc. Việc thứ nhất có thể làm bằng n1 cách, việc thứ hai có thể làm bằng
n2 cách và nếu hai việc này có thể làm độc lập với nhau, khi đó sẽ có n1+ n2 cách làm cả hai việc.
Các ví dụ dưới đây minh họa việc sử dụng quy tắc tổng như thế nào.
Ví dụ . Giả sử cần chọn hoặc là một cán bộ của khoa Công nghệ hoặc là một sinh viên công
nghệ làm đại diện trong Hội đồng của Khoa. Hỏi có bao nhiêu cách chọn vị đại biểu này nếu
khoa Công nghệ có 127 cán bộ và 813 sinh viên?
Giải. Ta gọi việc thứ nhất là việc chọn một cán bộ của khoa Công nghệ. Nó có thể làm bằng
127 cách. Việc thứ hai, chọn một sinh viên khoa Công nghệ, có thể làm bằng 813 cách. Theo
nguyên lý cộng có 127 + 813 = 940 cách chọn vị đại diện này.
Giả sử các việc T1,T2,...,Tm có thể làm tương ứng bằng n1,n2,..,nm cách và giả sử m việc này có
thể thực hiện độc lập nhau. Khi đó số cách làm cả m việc là n 1+ n2 +.. + nm.
Nguyên lý nhân
Giả sử một nhiệm vụ nào đó được tách ra làm hai việc. Việc thứ nhất có thể làm bằng n1
cách, việc thứ hai có thể làm bằng n2 cách sau khi việc thứ nhất đã được làm, khi đó sẽ có n1. n2
cách thực hiện nhiệm vụ này.
Ví dụ: Người ta có thể ghi nhãn cho những chiếc ghế trong một giảng đường bằng một chữ
cái và một số nguyên dương không vượt quá 100. Bằng cách như vậy bao nhiêu chiếc ghế có
thể được ghi nhãn khác nhau?
Giải. Thủ tục ghi nhãn cho một chiếc ghế gồm hai việc, gán một trong 26 chữ cái và sau đó
gán một trong 100 số nguyên dương. Nguyên lý nhân chỉ ra rằng có 26.100 cách khác nhau để
gán nhãn cho một chiếc ghế. Như vậy nhiều nhất ta có thể gán nhãn cho 2600 chiếc ghế.
Giả sử một nhiệm vụ nào đó được thi hành bằng T1,T2 ,.. ,Tm việc. Nếu việc Ti có thể làm
bằng ni cách sau khi các việc T1,T2 ,.. , Ti-1 đã được làm, khi đó có n1. n2... .nm cách thi hành
nhiệm vụ đã cho.
Ví dụ . Có bao nhiêu dãy nhị phân có độ dài bằng 7 ?
Giải. Mỗi một trong 7 bit của dãy nhị phân có thể chọn bằng hai cách vì mỗi bit hoặc bằng
0 hoặc bằng 1. Bởi vậy, nguyên lý nhân cho thấy có tổng cộng 2 7 =128 dãy nhị phân khác nhau
có độ dài bằng7.
Nguyên lý bù trừ
Khi một phần của hai công việc có thể được làm đồng thời, chúng ta không thể dùng
nguyên lý cộng để tính số cách thực hiện nhiệm vụ gồm cả hai việc. Cộng số cách làm mỗi việc
sẽ dẫn đến sự trùng lặp, vì những cách làm cả hai việc sẽ được tính hai lần. Để tính đúng số
cách thực hiện nhiệm vụ này ta cộng số cách làm mỗi một trong hai việc rồi trừ đi số cách làm
đồng thời cả hai việc. Đó là nguyên lý bù trừ. Ví dụ sau sẽ minh họa chúng ta có thể giải quyết
bài toán đếm như thế nào khi sử dụng nguyên lý này.
Ví dụ. Có bao nhiêu dãy nhị phân độ dài 8 bit hoặc được bắt đầu bằng bit 1 hoặc kết thúc
bằng hai bit 00?
Giải: Việc thứ nhất, xây dựng các dãy nhị phân độ dài 8 bit bắt đầu bằng bit 1, có thể được
làm bằng 27=128 cách, vì bit đầu chỉ có thể chọn bằng một cách, mỗi một trong bẩy bít sau có
thể chọn bằng hai cách.Việc thứ hai, xây dựng các dãy nhị phân độ dài 8 bit kết thúc bằng hai
bit 00, có thể làm bằng 26 = 64 cách, vì mỗi một trong sáu bit đầu có thể làm bằng hai cách, hai
bit cuối cùng có thể chọn chỉ bằng một cách. Có thể làm cả hai việc đồng thời, xây dựng các dãy
nhị phân dài 8 bit bắt đầu bằng bit 1 và kết thúc bằng hai bit 00, bằng 2 5 = 32 cách, vì mỗi một
trong 5 bit từ bit thứ hai tới bit thứ sáu có thể chọn bằng hai cách, bit đầu và hai bit cuối cùng
có thể chọn chỉ bằng một cách. Cuối cùng, số dãy nhị phân độ dài 8 bit hoặc được bắt đầu bằng
bit 1 hoặc kết thúc bằng hai bit 00 bằng số cách làm hoặc công việc một hoặc công việc hai và
bằng 128+64-32=160.
Nguyên lý Dirichle
Nếu có k+1 hoặc nhiều hơn đồ vật được đặt vào trong k hộp, thì có ít nhất một hộp chứa
hai hoặc nhiều hơn hai đồ vật.
Nếu có N đồ vật được đặt vào trong k hộp, sẽ tồn tại một hộp chứa ít nhất N/k vật.
Ví dụ 4. Trong 100 người có ít nhất 100 / 12 = 8.33= 9 người cùng tháng sinh.
Bài toán tối ưu
Các chi tiết lần lượt gia công trên các máy A,B. Thời gian gia công cho bởi bảng sau:
Chi tiết
D1 D2 D3 … Dn
Máy
A a1 a2 a3 … an
B b1 b2 b3 … bn
Hãy tìm lịch gia công tối ưu cho 2 máy đó, vẽ sơ đồ Gantt để tìm thời gian gia công tối
ưu.
Bước 1:
Bước 2:
Các chi tiết lần lượt gia công trên các máy A,B. Thời gian gia công cho bởi bảng sau:
Chi tiết
D1 D2 D3 D4 D5
Máy
A 6 5 3 4 7
B 5 3 6 5 6
Hãy tìm lịch gia công tối ưu cho 2 máy đó, vẽ sơ đồ Gantt để tìm thời gian gia công tối
ưu.
Đáp án:
N1=D3, D4
N2=D1, D2,D5
2. Logic
¿
Phép tuyển ( )
Nhận giá trị đúng khi một trong hai mệnh đề đúng, nhận giá trị sai khi cả hai mệnh đề sai
¿
Phép hội ( )
Nhận giá trị đúng khi cả hai mệnh đề đúng, nhận giá trị sai khi một trong hai mệnh đề sai
Ví dụ: “ Hôm nay thứ sáu và trời mưa”. Mệnh đề này đúng vào hôm thứ sáu trời mưa, và là
sai vào bất kỳ ngày nào không phải là thứ sáu, trời không mưa hoặc thứ sáu nhưng trời không
mưa..
¬¿ ¿
Phép phủ định ( hoặc - )
Phủ định của đúng là sai, phủ định của sai là đúng
⊕
Phép tuyển loại ( )
Nhận giá trị đúng khi một trong hai đúng, nhận giá trị sai khi cả hai mệnh đề cùng đúng
hoặc cùng sai.
→
Phép kéo theo ( )
Chỉ nhận giá trị sai khi mệnh đề thứ nhất là đúng, mệnh đề thứ hai là sai.
Ví dụ: “Nếu hôm nay trời nắng thì chúng tôi sẽ đi ra bãi biển”
Mệnh đề này chỉ sai khi hôm nay trời nắng nhưng chúng tôi không đi ra biển.
Mệnh đề tương đương pq là mệnh đề chỉ đúng khi p và q có cùng giá trị chân lý và sai
trong mọi trường hợp còn lại.
Chú ý: mệnh đề tương đương đúng chỉ khi pq và qp đều đúng. Mệnh đề tương đương
pq có các cách diễn đạt là ‘p nếu và chỉ nếu q”, “p là cần và đủ đối với q” và “nếu p thì q và
ngược lại”.
p q p p
¿
q p q
¿
⊕ p
→
q pq
p q
0 0 1 0 0 0 1 1
0 1 1 1 0 1 1 0
1 0 0 1 0 1 0 0
1 1 0 1 1 0 1 1
Tương tự như đối với các phép toán số học, để tránh phải dùng nhiều dấu ngoặc trong các
biểu thức logic, ta đưa ra một thứ tự ưu tiên trong việc tính toán. ở trên ta có 5 toán tử logic:
¿ ¿ → ↔
- ( phủ định), (và), (hoặc), (kéo theo), (tương đương). Thứ tự ưu tiên của các toán tử
trên được liệt kê theo mức độ giảm dần như sau :
¿,∨,−
→,↔
Trong đó, các toán tử liệt kê trên cùng dòng có cùng độ ưu tiên.
Dưới đây, chúng ta sẽ liệt kê ra một số luật logic thường được sử dụng trong lập luận và
chứng minh. Các luật này có thể được suy ra trực tiếp từ các bảng chân trị của các biểu thức
logic.
p⇔ p
(luật phủ định của phủ định).
1⇔ 0
0 ⇔1
p∧q ⇔q∧ p
Luật De Morgan
( p∧q ) ⇔ p∨q
( p∨q ) ⇔ p∧q
p∧ p ⇔0
Luật kéo theo
p→q ⇔ p∨q
Luật tương đương
p ↔ q⇔ ( p →q ) ∧( q→ p )
3. Đại số Boole
Các cổng logic
Một sơ đồ mạch điện tử với hai đầu vào a và b, và đầu ra là a.b sẽ được biểu diễn bởi sơ đồ
sau đây, được gọi là cổng “Và”(AND).
a
a.b
b
Tương tự, đối với các phép toán Boole khác ta cũng có các cổng tương ứng có ký hiệu sơ đồ
như sau: a
a+b
Cổng “Hoặc” (OR)
b
Bộ đảo (NOT)
¿
¿
aa a a a
hay
b
Cổng “Không hoặc”
a a+b
b
x
x +xy + y
y
Phương pháp bảng Karnaugh tối thiểu hóa hàm Boole
Phương pháp này đuợc Maruice Karnaugh đưa ra vào năm 1953. Phương pháp này thường
chỉ áp dụng khi hàm có số biến tương đối nhỏ.
Các bảng Karnaugh cho chúng ta một phương pháp trực quan để rút gọn các khai triển tổng
các tích. Trước hết chúng ta minh hoạ cách dùng phương pháp bảng Karnaugh để rút gọn biểu
thức của các hàm Boole hai biến.
Một bảng Karnaugh đối với hàm Boole 2 biến gồm 4 ô vuông, trong đó hình vuông biểu
diễn tiểu hạng có mặt trong khai triển được ghi số 1. Các hình ô được gọi là kề nhau nếu các
tiểu hạng mà chúng biểu diễn chỉ khác nhau một tục biến (tục biến là một biến ở tiểu hạng này
nhưng nó là phủ định của biến ấy ở tiểu hạng kia). Ví dụ ô biểu diễn
x y kề với các ô vuông biểu
diễn xy,
x y . Bốn ô vuông và các tiểu hạng mà chúng biểu diễn được cho trên hình 4.5
y y
x xy x
y
x xy x
y
x
Ví dụ 2: Hàm Boole f(x,y) = xy + y + x
y có bảng Karnaugh tương ứng là:
y y
x 1 1
x 1
xy + x
y =x
x y
Vậy f(x,y) = xy + y + x =x + y
Bảng Karnaugh ba biến là một hình chữ nhật được chia thành 8 ô. Các ô biểu diễn 8 tiểu
hạng 3 biến khả dĩ. Hai ô được gọi là kề nhau nếu các tiểu hạng mà chúng biểu diễn khác nhau
một tục biến
yz
y
z y z yz
x
x
Từ bảng Karnaugh, chúng ta có thể tổ hợp các tiểu hạng như sau:
Các khối gồm 2 ô kề nhau biểu diễn số 1 tổ hợp thành một tích chỉ có hai biến
Các khối gồm 4 ô kề nhau có thể tổ hợp thành tích chỉ có một biến duy nhất.
Bảng gồm tất cả các ô số 1 thì f(x, y, z)=1
yz
y
z y z yz
x 1
x 1
xy z + x y z= y z
yz
y
z y z yz
x
x 1 1
x yz + x y z = x z
yz
y
z y z yz
x 1 1
x 1 1
xy z + x y z + x y z + x yz =z
yz
y
z yz yz
x
x 1 1 1 1
x yz + x y z + x y z + x y z = x
yz
y
z y z yz
x 1 1 1 1
x 1 1 1 1
xyz + xy z + x y z + x y z + x yz + x y z + x y z + x yz = 1
Rút gọn ở ví dụ 4:
x
xyz + yz = yz
x yz + x y z = x y
x yz + x y z = x z
f(x,y,z) = xyz +
x y z + x yz + x y z +x y z = yz + x y + x z
4.Đồ thị
Chu trình và đường Euler
e9 e8 e6 e5
v v
Hình 5.22
z = v1e1v3e8v6e9v2e2v3e3v4e4v5e5v7e6v4e7v1.
Định lý: Đồ thị vô hướng G = <V,E> có chu trình Euler khi và chỉ khi G là liên thông và bậc
của tất cả các đỉnh trong đồ thị G là số chẵn.
Định nghĩa: Đường Euler trong đồ thị G = <V, E> là đường đi qua tất cả các cạnh (cung) của
đồ thị, mỗi cạnh đi qua đúng một lần.
Định lý: Cho G = <V, E> là đồ thị vô hướng liên thông. Điều kiện cần và đủ để đồ thị có
đường Euler nhưng không có chu trình Euler là số đỉnh bậc lẻ trong đồ thị là 2.
c
e
g f
Đồ thị G1 có chu trình hay đường Euler không? Nếu có hãy chỉ ra đường hay
chu trình Euler đó.
Giải:
a) Phát biểu (không chứng minh) điều kiện cần và đủ để một đồ thị vô hướng có
chu trình Euler: Đồ thị vô hướng G = <V,E> có chu trình Euler khi và chỉ khi G là
liên thông và bậc của tất cả các đỉnh trong đồ thị G là số chẵn.
Phát biểu (không chứng minh) điều kiện cần và đủ để một đồ thị vô hướng có
đường Euler nhưng không có chu trình Euler: Cho G = <V, E> là đồ thị vô hướng
liên thông. Điều kiện cần và đủ để đồ thị có đường Euler nhưng không có chu
trình Euler là số đỉnh bậc lẻ trong đồ thị là 2.
như vậy G1 có 2 đỉnh bậc lẻ, các đỉnh khác bậc chẵn nên không có chu trình
Euler mà có đường Euler đường đó là a b f a g f c e d c b
2 Đường đi ngắn nhất trong đồ thị có trọng số
∈
Cho đồ thị hữu hạn G = <V,E>. Với mỗi cạnh e E ta đặt tương ứng với số dương l(e) và gọi
là trọng số của e.
Đồ thị với các cạnh có trọng số như trên gọi là đồ thị có trọng số.
α
Ta ký hiệu D(a,b): = tập tất cả các đường nối đỉnh a với đỉnh b trong đồ thị G=<V,E>, gọi là
α
vi ei vi ei vi ei vi
1 1 2 2 n−1 n−1 n ∈ ∈
một đường nào đó trong G và giả sử = ... , vij V, eij E (j=1,2,...,n).
n−1
∑ l(e ij )
α j=1 α
Khi đó ta ký hiệu l( )= và gọi là trọng số của đường .
∈
Bài toán: Cho đồ thị đơn liên thông có trọng số G = <V,E> và a,b V là hai đỉnh trong đồ thị.
α α
Tìm các đường từ đỉnh a đến đỉnh b trong đồ thị G = <V,E> có trọng số ít nhất, tức thoả
α β β∈
mãn l( ) = min{l( )/ D(a,b)}
Thuật toán:
Bước 3: Xác định đường từ a đến b có trọng số ít nhất.
Từ bước 3 ta xác định được trọng số của đỉnh b. Xuất phát từ b đi về đỉnh kề với b, chẳng
vi σ σ in
v vi vi
n n n
hạn đó là đỉnh có tính chất (b) = ( ) + l( ,b). Nếu không có đỉnh kề như vậy thì ta
đi về đỉnh kề với b có trọng số cạnh (cung) từ đỉnh đó về b là ít nhất.
vi vi σ
vi σ
vi vi vi
n n−1 n n−1 n−1 n
Từ đỉnh ta đi ngược về đỉnh có tính chất ( )= ( ) + l( , ), nếu không đi
vi
n
về đỉnh kề với mà trọng số cạnh (cung) giữa chúng là ít nhất.
vi σ
vi σ
vi vi
1 1 1 1
Bằng cách đó ta sẽ đi về đỉnh mà đỉnh kề là a sao cho ( )= (a) +l(a, )= l(a, ),
σ
với (a)=0.
α
vi vi vi vi
1 2 n−1 n
Đường =a ... b là đường đi từ a đến b có trọng số ít nhất trong số tất cả các
đường từ a đến b.
α β β∈
l( ) = min{l( )/ D(a,b)}
Procedure Dijkstra (G: đồ thị liên thông có trọng số dương)
∞
{G có các đỉnh a= v0, v1, ..., vn =b và trọng số l(vi,vj) =
∉
nếu (vi,vj) E của G}
∅
S:= ;
∞
{ban đầu các nhãn được khởi tạo sao cho nhãn của a bằng 0, còn các đỉnh khác bằng , tập
S là rỗng}
∉
While (b S)
{
σ
u:= đỉnh không thuộc S có nhãn (u) nhỏ nhất;
¿
S:= S {u};
{thêm vào S đỉnh có nhãn nhỏ nhất và sửa đổi nhãn của các đỉnh không thuộc S}
α
}; {l( ) = l(a,b) = độ dài đường đi ngắn nhất từ a đến b}.
Ví dụ: Dùng thuật toán Dijkstra tìm đường đi độ dài ngắn nhất từ đỉnh a đến đỉnh d của đồ
thị có trọng số cho trong hình 5.29
5
4 b c 6
8
a 2
1 d
2
f e 3
10
Hình 5.29
Giải: Các buớc dùng thuật toán Dijkstra tìm độ dài đường đi ngắn nhất giữa đỉnh a và đỉnh
d được biểu diễn bởi bảng dưới đây:
S a b c d e f
∅ 0 ∞ ∞ ∞ ∞ ∞
{a} 4, a ∞ ∞ ∞ 2, a
{a, f, b} 8, b ∞ 12, f
{a, f, b, c, e} 13, e
{a, f, b, c, e, d}
Tìm các đường đi ngắn nhất từ a tới d có trọng số 13 bằng cách đi từ d ngược trở lại a
b3,f c8,b
d13,e
a0 e10,c
f2,a
Đường đi ngắn nhất từ a đến d là: a f b c e d, với độ dài là 13.
5. Cây
6.5 Cây khung nhỏ nhất.
Định nghĩa 1. Cây khung nhỏ nhất trong một đồ thị liên thông, có trọng số là một cây khung
có tổng các trọng số trên các cạnh của nó là nhỏ nhất.
Cuối mục này, chúng ta chứng minh rằng thuật toán này tạo ra cây khung nhỏ nhất cho đồ
thị liên thông có trọng số. Thuật toán 1 mô tả thuật toán Prim ở dạng giả mã.
Ví dụ 1. Dùng thuật toán Prim để thiết kế một mạng truyền thông có giá tối thiểu để nối các
trung tâm máy tính biểu diễn trên Hình 6.20.
Giải. Chúng ta sẽ giải bài toán này bằng cách tìm cây khung nhỏ nhất trong đồ thị trên Hình
1. Thuật toán Prim được tiến hành bằng cách chọn cạnh đầu tiên là cạnh có trọng số nhỏ nhất
và lần lượt thêm một cạnh có trọng số nhỏ nhất trong số những cạnh nối với một đỉnh của cây
và không tạo thành một chu trình. Các cạnh được tô đậm trên Hình 1 là cây khung nhỏ nhất
nhận được bằng thuật toán Prim, từng bước chọn cạnh là (b,e), (ed), (d,a), (a,c), Độ dài tổng
cộng là 3600 $
1200$
a 2000$ b
1000$
900$ d
1300$ 1600$
700$ 800$
1400$
2200$
Hình 6.20
Ví dụ 2. Dùng thuật toán Prim, hãy tìm cây khung nhỏ nhất của đồ thị trên Hình 21.
a 2 b 3 c 1 d
3 1 2 5
e 4 f 3 g 3 h
4 2 4 3
Giải. Cây khung nhỏ nhất được xây dựng bằng thuật toán Prim được thể hiện trên Hình
6.21. Thứ tự chọn các cạnh cũng được biểu diễn trong bảng bên cạnh. Độ dài cây khung nhỏ
nhất là 24.
Thuật toán Kruskal. Thuật toán này do Kruskal phát minh năm 1956, mặc dù ý tưởng cơ
bản của nó đã được biết từ sớm hơn nhiều. Để thực hiện thuật toán Kruskal ta chọn cạnh có
trọng số nhỏ nhất của đồ thị. Lần lượt ghép vào cạnh có trọng số tối thiểu, và không tạo thành
chu trình với các cạnh đã được chọn. Thuật toán dừng sau khi n-1 cạnh đã được chọn.
Dạng giả mã của thuật toán này được cho trong Thuật toán 2.
begin
Trong thuật toán Prim ta chọn các cạnh có trọng số tối thiểu, liên thuộc với các đỉnh đã
thuộc cây và không tạo ra chu trình. Trong khi đó thuật toán Kruskal chọn các cạnh có trọng số
tối thiểu mà không nhất thiết phải liên thuộc với các đỉnh của cây và không tạo ra chu trình.
Chú ý rằng cũng như trong thuật toán Prim, khi dùng thuật toán Kruskal nếu các cạnh là không
được sắp thứ tự có thể có nhiều cách chọn trong mỗi bước của thuật toán này. Do đó để cho
thủ tục xác định cần sắp xếp các cạnh theo một trật tự nào đó. Ví dụ sau đây sẽ minh họa cách
dùng thuật toán Kruskal.
Ví dụ 3. Dùng thuật toán Kruskal, hãy tìm cây khung nhỏ nhất của đồ thị trên hình 6.21.
Giải. Cây khung nhỏ nhất và cách chọn các cạnh trong mỗi bước của thuật toán Kruskal
được thể hiện trên Hình 6.22.
a 2 b 3 c 1 d
3 1 2 5
e 4 f 3 g 3 h
4 2 4 3
i 3 j 3 k 1 l
Bây giờ chúng ta sẽ chứng minh rằng thuật toán Prim tạo ra cây khung nhỏ nhất của đồ thị
liên thông có trọng số.
6 3 8
4 5 H 14 3
6
1
5 2 4
1 G
3 9 D
F E
begin
b) Áp dụng (1.5 đ)
- Sắp xếp
1 AB AB
2 BE AB,BE
3 FH AB,BE, FH
4 EG AB,BE, FH, EG
Cây khung nhỏ nhất AB,BE, FH, EG, EF, BC, CD với trọng số 14