BỘ LAO ĐỘNG THƯƠNG BINHVÀ XÃ HỘI
TỔNG CỤC DẠY NGHỀ
GIÁO TRÌNH
Mơn học: TỐN ỨNG DỤNG
NGHỀ: QUẢN TRỊ MẠNG MÁY TÍNH
TRÌNH ĐỘ: CAO ĐẲNG NGHỀ
( Ban hành kèm theo Quyết định số:120/QĐTCDN ngày 25 tháng 02 năm 2013 của Tổng
cục trưởng Tổng cục dạy nghề)
Hà Nội, năm 2013
TUN BỐ BẢN QUYỀN:
Tài liệu này thuộc loại sách giáo trình nên các nguồn thơng tin có thể được phép
dùng ngun bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.
Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh
thiếu lành mạnh sẽ bị nghiêm cấm.
MÃ TÀI LIỆU: MH 11
3
LỜI GIỚI THIỆU
Trong những năm qua, dạy nghề đã có những bước tiến vượt bậc cả về số lượng và
chất lượng, nhằm thực hiện nhiệm vụ đào tạo nguồn nhân lực kỹ thuật trực tiếp đáp ứng
nhu cầu xã hội. Cùng với sự phát triển của khoa học cơng nghệ trên thế giới, lĩnh vực
Cơng nghệ thơng tin nói chung và ngành Quản trị mạng ở Việt Nam nói riêng đã có những
bước phát triển đáng kể.
Chương trình dạy nghề Quản trị mạng đã được xây dựng trên cơ sở phân tích nghề,
phần kỹ năng nghề được kết cấu theo các mơđun. Để tạo điều kiện thuận lợi cho các cơ
sở dạy nghề trong q trình thực hiện, việc biên soạn giáo trình theo các mơđun đào tạo
nghề là cấp thiết hiện nay.
Mơn học 11: Tốn ứng dụng là mơnhọc đào tạo nghề được biên soạn theo hình thức
tích hợp lý thuyết và thực hành. Trong q trình thực hiện, nhóm biên soạn đã tham khảo
nhiều tài liệu liên quan, kết hợp với các kinh nghiệm trong thực tế.
Mặc dầu có rất nhiều cố gắng, nhưng khơng tránh khỏi những khiếm khuyết, rất
mong nhận được sự đóng góp ý kiến của độc giả để giáo trình được hồn thiện hơn.
Xin chân thành cảm ơn!
Hà Nội, ngày 25 tháng 02 năm 2013
Tham gia biên soạn
1. Chủ biên ThS. Nguyễn Như Thành
2. ThS. Ngơ Thị Thanh Trang
MỤC LỤC
TỐN ỨNG DỤNG
Mã mơn học: MH11
I. VỊ TRÍ, TÍNH CHẤT, Ý NGHĨA VÀ VAI TRỊ CỦA MƠN HỌC:
Vị trí: Mơn học được bố trí sau khi sinh viên học xong các mơn học chung.
4
Tính chất: Là mơn học cơ sở nghề.
Ý nghĩa: Đây là mơ đun đào tạo chun mơn nghề, cung cấp cho sinh viên các kỹ năng
cơ bản nhất của nghề Quản trị mạng.
II. MỤC TIÊU MƠN HỌC:
Vận dụng các kiến thức đã sinh viên viên xây dựng các thuật tốn tính : tổ hợp, hốn vị,
giải hệ phương trình, phương trình, tính tích phân;
Sử dụng các kiến thức đã sinh viên viên xây dựng thuật tốn quay lại, các bài tốn tối
ưu, bài tốn tồn tại;
Là nền tảng để sinh viên học mơn cấu trúc dữ liệu và giải thuật, cài đặt các thuật tốn
trong tin học;
Bố trí làm việc khoa học đảm bảo an tồn cho người và phương tiện học tập.
III. NỘI DUNG CỦA MƠN HỌC:
Số TT
I
II
III
IV
Tên chương,
mục
Quan hệ
Suy luận
tốn học
Quan hệ hai
ngơi
Suy luận
tốn học
Ma trận và
thuật tốn
Ma trận
Thuật tốn
Tính tốn
và xác suất
Tính tốn
Xác suất
Phương
pháp tính
Số xấp xỉ và
sai số
Giải gần
đúng các
phương
trình
Giải hệ
thống
Thời gian
Tổng số
Lý thuyết
Thực hành
Bài tập
Kiểm tra*
LT hoặc TH
6
5
1
12
9
2
1
18
13
4
1
24
18
5
1
5
phương
trình đại số
tuyến tính
Nội suy và
phương
pháp bình
phương cực
tiểu
Cộng
60
45
12
3
Chương 1. QUAN HỆ VÀ SUY LUẬN TỐN HỌC
Mã chương: MH1101
Mục tiêu:
Trình bày được các phép tốn trong quan hệ hai ngơi;
Trình bày được thứ tự các phép tốn trong biểu thức;
Biến đổi chính xác các quan hệ tương đương trong các bài tốn theo dạng quan hệ;
Trả lời chính xác các bảng trắc nghiệm về quan hệ hai ngơi và suy luận tốn học;
Kiểm tra tính đúng của một chương trình cụ thể;
Áp dụng được giải thuật quy nạp và đệ qui;
Thực hiện các thao tác an tồn với máy tính.
Nội dung:
Quan hệ hai ngơi
Mục tiêu:
Trình bày được các phép tốn trong quan hệ hai ngơi;
Trình bày được thứ tự các phép tốn trong biểu thức;
Biến đổi chính xác các quan hệ tương đương trong các bài tốn theo dạng quan hệ.
1. Khái niệm về quan hệ hai ngơi
Giả sử cho tập X khác rỗng và một tính chất được thoả mãnvới một sốcặp phần tử
a, b nào đó của X . Khi đó ta nói a có quan hệ với bvà viết a b, cịn được gọi là một quan
hệ hai ngơi trong X.
Ví dụ 1.1:
1) Trong tập R mọi số thực, quan hệ “a = b” hoặc quan hệ “a b” là quan hệ hai
ngơi.
2) Trong tập mọi đường thẳng trên mặt phẳng, quan hệ vng góc giữa hai đường
thẳng là quan hệ hai ngơi.
3) Trên tập N* các số ngun dương, “ a là ước số của b” là quan hệ hai ngơi.
4) Trên tập P(E) các phân tập của tập E quan hệ bao hàm A B là quan hệ hai ngơi.
2. Các tính chất có thể có của quan hệ trong một tập hợp
6
Quan hệ trong tập X (tức X2) có thể có các tính chất sau:
Tính phản xạ : a a a X (tức là (a, a)a X )
Tính đối xứng : a b b a (tức nếu (a, b) thì (b, a) )
Tính phản đối xứng : (ab và ba ) a = b
Tính bắc cầu : (ab) và (bc) ac
Ví dụ 1.2:
Trong tập hợp P(X) các phân tập của tập hợp X quan hệ bao hàm A B có tính phản
xạ, phản đối xứng và bắc cầu mà khơng có tính đối xứng.
Trong tập hợp mọi đa thức của một biến số thực, quan hệ bằng nhau có tính phản
xạ, đối xứng và bắc cầu.
3. Quan hệ tương đương
Quan hệ trong tập X gọi là quan hệ tương đương nếu nó có tính phản xạ, đối
xứng, bắc cầu.
Trong trường hợp này, ta viết a ~ b thay vì ab .
Ví dụ1.3: Quan hệ song song giữa các đường thẳng trong tập mọi đường thẳng của
khơng gian (coi 2 đường thẳng trùng nhau là song song); quan hệ đồng dạng giữa các tam
giác; quan hệ cùng tỉnh của một tập hợp dân một thành phố là các ví dụ trực quan của quan
hệ tương đương.
Các lớp tương đương :
Giả sử ~ là một quan hệ tương đương trong X. Với mỗi phần tử aX,
ta ký hiệu C(a) là tập hợp mọi phần tử thuộc X tương đương với a và gọi nó là lớp tương
đương chứa a.
C(a) = {xX / x ~ a}
Do tính phản xạ a ≈ a nên mỗi tập con C(a) không rỗng. Hơn nữa nếu
C(a)C(b)Ø thì c(a) = c(b).
Thật vậy, giả sử cC(a)C(b), thì ta có :
cC(a) và cC(b)
Tức là c ~ a và c ~ b, hay b ~ c ~ a. Từ đó do tính chất bắc cầu, suy ra b ~ a, vậy
bC(a).
Lập luận tương tự ta cũng có aC(b), tức là C(a) = C(b).
Từ đó rút ra được định lý :
Một quan hệ tương đương trong X xác định một phân hoạch của X, mỗi phần tử
của phân hoạch này là một lớp tương đương.
Họ các lớp tương đương này được gọi là tập thương, ký hiệu X/~.
Ví dụ 1.4: Trong tập các số ngun Z.
Xét quan hệ R :
aba – b = 2p a, b, p Z.
Ta có :
(a a)
a – a = 2p (p = 0)
phản xạ
(a b)
a – b = 2p (b – a) = 2p (b a)
đối xứng
a – b = 2p, b – c = 2q
7
(a – c) = (a – b) + (b – c) = 2(p + q)
bắc cầu
Vậy là một quan hệ tương đương.
Ta có : a = b + 2p
Lớp tương đương ứng với b = 0 là các số chẳn.
Lớp tương đương ứng với b = 1 là các số lẻ.
4. Quan hệ thứ tự
Định nghĩa 1.1:Quan hệ trong X gọi là quan hệ thứ tự (hay quan hệ bộ phận) nếu
có tính phản đối xứng và bắc cầu.
Nếu ngồi ra với bất kỳ hai phần tử nào xX, y Y đều có xy hoặc yx thìgọi là quan
hệ thứ tự tồn phần (hay thứ tự tuyến tính).
Khilà một quan hệ thứ tự trong X ta nói X được xếp thứ tự bởivà thayvìxy ta viết x
y và đọc “x bé hơn y” hoặc “x đi trước y”. Ta cũng viết y x và đọc “y lớn hơn x” hoặc “y
đi sau x”.
Nếu x y và x y ta viết x < y (hay y > x).
Ví dụ 1.5:
Quan hệ < hoặcthơng thường trong tập hợp các số thực là quan hệ thứ tự tồn
phần, R là tập được sắp thứ tự.
Quan hệ bao hàm trong tập P(X) mọi tập con của tập X là quan hệ thứ tự bộ phận.
Tuy nhiên nó khơng là thứ tự tồn phần.
Quan hệ “a b” tức a là bội số của b trong N* là quan hệ thứ tự bộ phận. Tập X
trong đó đã xác định một quan hệ thứ tự gọi là tập đựoc sắp xếp.
Suy luận tốn học
Mục tiêu:
Trình bày chính xác về quy nạp tốn học và đệ quy;
Kiểm tra tính đúng của một chương trình cụ thể;
Áp dụng được giải thuật quy nạp và đệ quy.
2.1. Quy nạp tốn học
Nhiều định lý phát biểu rằng P(n) là đúng với mọi n ngun dương, trong đó P(n) là
một hàm mệnh đề. Quy nạp tốn học là một kỹ thuật chứng minh các định lý thuộc loại
như thế. Nói cách khác quy nạp tốn học thường được sử dụng để chứng minh các mệnh
đề P(n), trong đó n là số ngun dương tuỳ ý.
Qua trình chứng minh P(n) là đúng với mọi số ngun dương n bao gồm hai bước :
Bước cơ sở : Chỉ ra mệnh đề P(1) là đúng.
Bước quy nạp : chứng minh phép kéo theo P(n) P(n + 1) là đúng với mọi số
ngun dương n, trong khi đó người ta gọi P(n) là giả thiết quy nạp.
Khi hồn thành cả hai bước chúng ta đã chứng minh P(n) là đúng với mọi n ngun
dương, tức là đã chứng minh P(n) là đúng.
Ví dụ 2.1: Bằng quy nạp tốn học hãy chứng minh rằng tổng n số ngun dương lẻ
đầu tiên là n2.
8
Giải: Gọi P(n) là mệnh đề “tổng n số ngun dương lẻ đầu tiên là n2”. Đầu tiên ta
cần làm bước cơ sở, tức là phải chỉ ra P(1) là đúng. Sau đó phải chứng minh bước quy nạp,
tức là cần chỉ ra P(n + 1) là đúng nếu giả sử P(n) là đúng.
Bước cơ sở : P(1) hiển nhiên là đúng vì 1 = 12.
Bước quy nạp : Giả sử P(n) đúng, tức là với mọi n ngun dương lẻ ta có :
1+3+5+…+(2n1) = n2
Ta phải chỉ ra P(n+1) là đúng, tức là :
1+3+5+…+(2n1)+(2n+1) = (n+1)2
Do giả thuyết quy nạp ta suy ra :
1+3+5+…+(2n1)+(2n+1)
= [1+3+5+…+(2n1)]+(2n+1)
= n2+(2n+1) = (n+1)2
Đẳng thức này chứng tỏ P(n+1) được suy ra từ P(n).
Vì P(1) là đúng và vì mệnh đề kéo theo. P(n) P(n + 1) là đúng với mọi n ngun
dương, theo ngun lý quy nạp tốn học chỉ ra rằng P(n) là đúng với mọi n ngun dương.
2.2. Định nghĩa bằng đệ quy
Đơi khi chúng ta rất khó định nghĩa một đối tượng một cách tường minh, nhưng có
thể dễ dàng địng nghĩa đối tượng này qua chính nó.Kỹ thuật này được gọi là đệ quy.
1.i.1.a.
Các hàm được định nghĩa bằng đệ quy
Để định nghĩa một hàm xác định trên tập các số ngun khơng âm, chúng ta cho:
Giá trị của hàm tại n = 0.
Cơng thức tính giá trị của nó tại số ngun n từ các giá trị của nó tại các số
ngun nhỏ hơn.
Định nghĩa như thế được gọi là định nghĩa đệ quy hay định nghĩa quy nạp.
Ví dụ 2.2: Giả sử f được định nghĩa bằng đệ quy như sau :
f(0) = 3, f(n+1) = 2f(n)+3
Hãy tìm f(1), f(2), f(3) và f(4).
Giải : Từ định nghĩa đệ quy ta suy ra :
f(1) = 2f(0) + 3 = 2.3 + 3 = 9
f(1) = 2f(1) + 3 = 2.9 + 3 = 21
f(1) = 2f(2) + 3 = 2.21 + 3 = 45
f(1) = 2f(3) + 3 = 2.45 + 3 = 93
Trong một số định nghĩa hàm bằng đệ quy, người ta cho giá trị của hàm tại k số
ngun dương đầu tiên và cho qui tắc tính giá trị của hàm tại số ngun dương lớn hơn từ
k giá trị này. Theo ngun lý thứ hai của quy nạp tốn học thì cách định nghĩa này tạo ra các
hàm hồn tồn xác định.
1.i.1.b.
Các tập hợp được định nghĩa bằng đệ quy
Các tập hợp thường được định nghĩa bằng đệ quy.Trước tiên người ta đưa ra tập
xuất phát.Sau đó là quy tắc tạo các phần tử mới từ các phần tử đã biết của tập.Những tập
9
đuợc mơ tả bằng cách như vậy được gọi là các tập được dịnh nghĩa tốt, các định lý về
chúng có thể chứng minh bằng cách sử dụng định nghĩa đệ quy của chúng.
Ví dụ 2.3: Giã sử S được định nghĩa bằng đệ quy như sau :
3 S;
x+y S nếu x S và y S;
Hãy chỉ ra rằng S là tập các số ngun chia hết cho 3.
Giải : Gọi A là tập các số ngun dương chia hết cho 3. Để chúng minh A = S ta sẽ
chứng minh rằng A là một tập con của S và S là tập con của A. Để chứng minh A là tập
con của S, giả sử P(n) là mệnh đề “3n thuộc tập S”. P(1) đúng vì theo định nghĩa của S “3.1
=3S”.
Giả sử P(n) đúng, tức là 3nS. Vì 3Svà 3nSnên theo định nghĩa 3+3n = 3(n+1)S. Điều
này có nghĩa là P(n+1) đúng. Theo quy nạp tốn học mọi số có dạng 3n, với n ngun
dương, thuộc S, hay nói cách khác A là tập con của S.
Ngược lại, 3S, hiển nhiên 3 chia hết cho 3 nên 3A. Tiếp theo ta chứng minh tất cả
các phần tử của S sinh ra do phần tử thứ 2 của định nghĩa, cũng thuọcc A. Giả sử x, y là
hai phần tử của S, cũng là hai phần tử của A. Theo định nghĩa của S thì x+y cũng là một
phần tử của S, vì x và y đều chia hết cho 3 nên x+y cũng chia hết cho 3, tức là x+yA. Vậy
S là tập con của A.
Định nghĩa đệ quy thường được dùng khi nghiên cứu các xâu kí tự. Xâu là một dãy
kí tự thuộc bộ chữ cái. Tập hợp các xâu ứng với bộ chữ cái được ký hiệu bởi *. Hai xâu có
thể kết hợp với nhau theo phép ghép. Ghép các xâu x và y cho xy là xâu tạo nên bằng cách
viết tiếp xâu y vào xâu x. Ví dụ : cho x = abra, y = cadabra, khi đó xy = abracadabra. Khi
chứng minh các kết quả về xâu người ta thường dùng định nghĩa đệ quy.
Ví dụ2.4: Định nghĩa đệ quy của tập các xâu.
Giả sử * là tập các xâu trên bộ chữ cái. Khi đó* được định nghĩa bằng đệ quy như
sau :
*, trong đó là một xâu rỗng (khơng có phần tử nào);
x* nếu * và x .
Phần đầu của định nghĩa nói rằng xâu rỗng thuộc*.Phần sau khẳng định bằng một xâu mới
tạo nên bằng cách ghép một kí tự củavới một xâu của* cũng thuộc*.
Độ dài của xâu, tức là số kí tự trong xâu, cũng được định nghĩa bằng đệ quy.
Ví dụ2.5: Hãy định nghĩa bằng đệ quy độ dài của xâu.
Giải:Ta kí hiệu độ dài của là 1(). Khi đó định nghĩa đệ quy của 1() như sau :
1() = 0, trong đó là xâu rỗng;
1(x) = 1() + 1 nếu * và x .
2.3. Các thuật tốn đệ quy
Định nghĩa 2.1:Một thuật tốn được gọi là đệ quy nếu nó giải bài tốn bằng các
cách rút gọn liên tiếp bài tốn ban đầu tới bài tốn cũng như vậy nhưng có dữ liệu vào nhỏ
hơn.
10
Ví dụ 2.6: Tìm thuật tốn đệ quy tính giá trị a n và a là số thực khác khơng và n là số
ngun khơng âm.
Giải : Ta xây dựng thuật tốn đệ quy như định nghĩa đệ quy của an , đó là an = a.an1
với n >0 và khi n = 0 thì a0 = 1. Vậy để tính an ta quy về các trường hợp có số mũ nhỏ hơn,
cho tới khi n = 0. Xem thuật tốn 1 sau đây :
Thuật tốn 1: thuật tốn đệ quy tínhan
Procedure power(a: số thực khác khơng ; n: số ngun khơng âm);
Begin
if n = 0 then power(a,n): = 1
elsepower(a,n): = a * power(a,n – 1);
End;
Định nghĩa đệ quy biểu diễn giá trị của hàm tại một số ngunqua giá trị của nó tại
các số ngun nhỏ hơn.Điều này có nghĩa là ta có thể xây dựng một thuật tốn đệ quy tính
giá trị của hàm được định nghĩa bằng đệ quy tại một điểm ngun.
Ví dụ 2.7: Thủ tục đệ quy sau đây cho ta giá rị của n! với n số ngun dương.
Giải: Ta xây dựng thuật tốn đệ quy như định nghĩa đệ quy của n! , đó là n! = n.(n
1)! với n>1 và khi n = 1 thì 1!= 1.
Thuật tốn 2: thuật tốn đệ quy tính giai thừa
Procedure factorial(n: ngun dương);
Begin
if n = 1 then factorial(n): = 1
elsefactorial(n): = n * factorial(n – 1);
End;
Có cách khác tính hàm giai thừa của một số ngun từ định nghĩa đệ quy của
nó.Thay cho việc lần lược rút gọn việc tính tốn cho các giá trị nhỏ hơn, chúng ta có thể
xuất phát từ giá trị của hàm tại 1 và lần lược áp dụng định nghĩa đệ quy để tìm giá trị của
hàm tại các số ngun lớn dần.Đó là thủ tục lặp. Nói cách khác để tìm n! ta xuất phát từ n!
= 1 (với n = 1), tiếp theo lần lượt nhân với các số nguncho tới khi bằng n. Xem thuật
tốn 3:
Thuật tốn 3: Thủ tục lặp tính giai thừa
Procedure factorial(n: ngun dương);
Begin
x : = 1;
for i : = 1 to n
x : = i*x;
End; {x là n!}
2.4. Tính đúng đắn của chương trình
Mở đầu
Giả sử rằng chúng ta thiết kế được một thuật tốn để giải một bài tốn nào đó và
dã viết chương trình để thể hiện nó. Liệu ta có thể tin chắc rằng chương trình có ln ln
cho lời giải đúng hay khơng ?Sau khi tất cả các sai sót về mặc cú pháp được loại bỏ, chúng
ta có thể thử chương trình với các đầu vào mẫu.Tuy nhiên, ngay cả khi chương trình cho
kết quả đúng với tất cả các đầu vào mẫu, nó vẫn có thể ln ln tạo ra các câu trả lời
11
đúng (trừ khi tất cả các đầu vào đều đã được thử).Chúng ta cần phải chứng minh rằng
chương trình ln ln cho đầu ra đúng.
Kiểm chứng chương trình
Một chương trình gọi là đúng đắn nếu với mọi đầu vào khả dĩ, nó cho đầu ra
đúng.Việc chứng minh tính đúng dắn của chương trình gồm hai phần.Phần đầu chỉ ra rằng
nếu chương trình kết thúc thì nhận được kết quả đúng.Phần này xác minh tính đúng đắn
bộ phận của chương trình.Phần thứ hai chứng tỏ chương trình ln ln là kết thúc.
Để định rõ thế nào là một chương trình cho thơng tin ra đúng, người ta thường dùng
hai mệnh đề sau :
Thứ nhất là khẳng định đầu, nó đưa ra những tính chất mà thơng tin đầu vào cần
phải có.
Mệnh đề thứ hai là khẳng định cuối, nó đưa ra những tính chất mà thơng tin đầu
ra cần phải có, tùy theo mục đích của chương trình. Khi kiểm tra chương trình cần phải
chuẩn bị các khẳng định đầu và khẳng định cuối.
Định nghĩa 2.2:Chương trình hay đoạn chương trình S được gọi là đúng đắn bộ
phận đối với khẳng định đầu p và khẳng định cuối q, nếu p là đúng với các giá trị vào của
S và nếu S kết thúc thì q là đúng với các giá trị ra của S. Ký hiệu p{S}q có nghĩa là chương
trình hay đoạn chương trình S là đúng đắn bộ phận đối với khẳng định đầu p và khẳng
định cuối q.
Chú ý:Khái niệm đúng đắn bộ phận khơng đề cập tới việc chương trình có kết
thúc hay khơng. Nó chỉ nhằm kiểm tra xem chương trình có làm được cái mà nó định làm
hay khơng, nếu nó kết thúc.
Câu lệnh điều kiện
Trước tiên, chúng ta sẽ trình bày những quy tắc suy luận đối với câu lệnh điều
kiện. Giả sử một đoạn chương trình có dạng :
If điềukiện then
S
Trong đó S là một khối lệnh.Khối S sẽ được thi hành nếu điều kiện là đúng và S sẽ
khơng được thi hành nếu điều kiện là sai.
Tương tự, giả sử một đoạn chương trình có dạng :
If điềukiện then
S1
Else
S2
Nếu điều kiện là đúng thì S1 được thi hành, nếu điều kiện là sai thì S2 được thi
hành.
Bất biến vịng lặp
Tiếp theo chúng ta sẽ trình bày cách chứng minh tính đúng đắncủa vịng lặp While.
Để xây dựng quy tắc suy luận cho đoạn chương trình dạng :
While điềukiện
12
S
Hãy lưu ý rằng S được lặp đi lặp lại cho tới khi nào điều kiện trở nên sai. Ta gọi
một điều khẳng định nà đó là bất biến vọng lặp nếu nó vẫn cịn đúng sau mỗi lần S thi
hành.
Bài tập chương 1101
Bài 1:Dùng quy nạp tốn học chứng minh rằng:
a. 1+3+5+…+2n1 = n2
n ngun dương.
b. 1 + 2 + 22 + … + 2n = 2n+1 1 n≥0 và ngun.
c. 12 + 22 + … + n2 = n≥0 và ngun.
d. 1.2 + 2.3 + …+ n(n+1) = n ngun dương.
Bài 2:Chứng minh đẳng thức sau đúng với mọi n > 1, a > 1 và a 0
(1 + a)n> 1 + na
13
Bài 3:Một dãy số a0, a1, a2 , ... an, ... có tính chất sau : a 0 = 0, an = 2an1 + 3 với mọi n 1.
Tìm nghiệm của cơng thức truy hồi trên.Viết thuật tốn đệ quy tính số hạng tổng qt an.
Bài 4:Một dãy a0 , a1, a2, ... an ... có tính chất sau: a0 = 0, a1 = 1, an = an1+ an2 với mọi n
2 được gọi là dãy Fibonacci.Tìm nghiệm của cơng thức truy hồi trên.Viết thuật tốn đệ
quy tính số hạng tổng qt an.
Bài 5: Hãy tìm f(1), f(2) và f(3) nếu f(n) được định nghĩa bằng đệ quy với f(0)=1 và với
n=1,2,…
a. f(n)=3.f(n1)
b. f(n)=f(n1)2 + f(n1) + 1
Bài 6: Hãy tìm f(2), f(3) và f(4) nếu f(n) được định nghĩa bằng đệ quy với f(0)= 1, f(1)=2
và n=2,3,…
a. f(n)=f(n1)+3f(n2)
b. f(n)=3f(n1)2 – 4f(n2)2
c. f(n)=f(n2)/f(n1)
Bài 7:Hãy cho định nghĩa đệ quy của hàm F(n)= trong đó a là một số thực và n là một số
ngun dương. Viết thuật tốn đệ quy tính
Bài 8:Xét 2 tập có thứ tự E và F, trong đó thứ tự cho bởi : 1 trên cả 2 tập hợp. Hãy xác
định quan hệ sau đây. Xác định trên E x F có phải là quan hệ thứ tự khơng ?
(x, y) (x’, y’) <=>
Bài 9:
Cho F: E > F và T là ánh xạ tương đương trên F. Người ta xác định quan hệ trên E
bởi x y f (x) T f(y).
Chứng minh rằng cũng là quan hệ tương đương.
Hướng dẫn thực hiện bài tập chương 1101
Bài 1:
a. Dùng hằng đẳng thức a2+2ab+b2=(a+b)2
b. Dùng đẳng thức an.am=am+n
c. Dùng phương pháp đặt thừa số chung.
d. Dùng phương pháp đặt thừa số chung.
Bài 2:
Bài 3:
m+n
Dùng đẳng thức a
=am.an
Sử dụng phương trình đặc trưng cho cơng thức truy hồi tuyến tính bậc hai giải tìm
nghiệm số hạng tổng qt an. Dựa vào cơng thức truy hồi viết thuật tốn đệ quy tính an.
Bài 4:
Sử dụng phương trình đặc trưng cho cơng thức truy hồi tuyến tính bậc hai giải tìm
nghiệm số hạng tổng qt an. Dựa vào cơng thức truy hồi viết thuật tốn đệ quy tính an.
Bài 5:
14
Dựa vào giả thiết là giá trị đầu f(0)và hàm đã được định nghĩa đệ quy f(n) ta suy ra
được các giá trị tiếp theo f(1), f(2) và f(3).
Bài 6:
Dựa vào giả thiết là giá trị đầu f(0),f(1) và hàm đã được định nghĩa đệ quy f(n) ta
suy ra được các giá trị tiếp theo f(2), f(3) và f(4).
Bài 7:
Dùng đẳng thức =. Từ đó suy ra kết quả.
Bài 8:
Sử dụng định nghĩa: Quan hệ trong X gọi là quan hệ thứ tự (hay quan hệ bộ phận)
nếu có tính phản đối xứng và bắc cầu.
Tính phản xạ : a a a X (tức là (a, a) a X )
Tính đối xứng : a b b a (tức nếu (a, b) thì (b, a) )
Tính bắc cầu : (a b) và (b c) a c
Bài 9:
Sử dụng định nghĩa: Quan hệ trong tập X gọi là quan hệ tương đương nếu nó có
tính phản xạ, đối xứng, bắc cầu.
Chương 2. MA TRẬN VÀ THUẬT TỐN
Mã chương: MH1102
Mục tiêu:
Thực hiện các phép tốn đối với một ma trận (ma trận 2 chiều).
Áp dụng triển khai các thuật tốn trên ma trận.
Tính tốn chính xác độ phức tạp của một thuật tốn đơn giản.
Trả lời chính xác các bảng test về ma trận và độ phức tạp của thuật tốn.
Sử dụng đúng các thuật tốn áp dụng cho ma trận.
Thực hiện các thao tác an tồn với máy tính.
Nội dung:
5. Ma trận
Mục tiêu:
Thực hiện được các phép tốn đối với ma trận;
Áp dụng triển khai thuật tốn cộng và nhân hai ma trận.
1.1. Mở đầu
Định nghĩa 1.1:Ma trận là một bảng số hình chữ nhật gồm mxn số thực được viết
thành m hàng và n cột có dạng như sau :
15
mn: cấp của ma trận
aij: phần tử nằm ở hàng i cột j
A
i: chỉ thứ tự hàng (i=)
j: chỉ thứ tự cột (j=)
Ký hiệu: A=[aij]mn
Ví dụ 1.1: Ma trận
là ma trận cấp 3x4
1.2. Số học ma trận :
a. Phép cộng hai ma trận :
Định nghĩa1.2:Cho A=[aij]mn và B=[bij]mn. Tổng của hai ma trận A,B là ma trận
C=[cij]mn sao cho cij = aij + bij i,j: i= ; j=
Ký hiệu: C=A+B
Ví dụ 1.2:
+ =
Tổng của hai ma trận có cùng kích thước nhận được bằng cách cộng các phần tử ở
những vị trí tương ứng.Các ma trận có kích thuớc khác nhau khơng thể cộng được với
nhau, vì tổng của hai ma trận chỉ được xác định khi cả hai ma trận có cùng số hàng và cùng
số cột.
Tính chất :Giả sử A, B là hai ma trận cùng cấp, khi đó :
A+B=B+A
(giao hốn)
A+(B+C)=(A+B)+C
(kết hợp)
b. Phép nhân hai ma trận
Định nghĩa1.3:Cho A=[aik]mq và B=[bkj]qn. Tích của ma trận A với ma
trận B là ma trận C=[cij]mn với i,j: i=, j=
Ký hiệu: A.B hay AB
Chú ý : Tích của hai ma trận chỉ được xác định khi số cột của ma trận thứ nhất
bằng số hàng của ma trận thứ hai.
=
=
Hình 2.1: Tích A=[aik]mq và B=[bkj]qn
Ví dụ 1.3: Cho
Tìm AB.
Giải : Vì A là ma trận 4x3 và B là ma trận 3x2 nên tích của AB là xác định và là ma
trận 4x2. Để tìm các phần tử của AB, các phần tử tương ứng của các hàng của A và các
cột của B ban đầu được nhân với nhau rồi sau đó các tích đó sẽ đuợc cộng lại. Ví dụ, phần
tử ở vị trí (3,1) của AB là tổng các tích của các phần tử ở hàng thứ ba của A và cột thứ
nhất của B, cụ thể là 3.2 + 1.1 + 0.3 = 7. Khi tất cả các phần tử của AB đã được :
Phép nhân ma trận khơng có tính chất giao hốn. Tức là nếu A và B là hai ma trận,
thì khơng nhất thiết AB phải bằng BA. Thực tế có thể chỉ một trong hai tích đó là xác định.
16
Ví dụ, nếu A là ma trận 2x3 và B là ma trậ 3x4, khi đó AB là xác định và là ma trận 2x4,
tuy nhiên ma trận BA là khơng xác định vì khơng thể nhân ma trận 3x4 với ma trận 2x3.
Giả sử A là ma trận m x n và B là ma trận r x s. Khi đó AB là xác định chỉ khi n = r
và BA là xác định chỉ khi s = m. Hơn nữa, khi AB và BA đều xác định, thì chúng cũng sẽ
khơng cùng kích thước trừ trường hợp m = n = r = s. Do đó, nếu cả hai AB và BA xác định
và có cùng kích thước thì cả A và B đều phải là các ma trận vng và có cùng kích thước.
Thậm chí nếu cả A và B dều là các ma trận n x n, thì AB và BA cũng khơng nhất thiết phải
bằng nhau, như ví dụ dưới đây cho thấy:
Ví dụ 1.4: Cho A =
Hỏi AB có bằng BA khơng ?
Giải : Ta tìm được
Vậy : AB BA
Tính chất:
A cấp mxn, B cấp nxp, C cấp pxq
A.(B.C)=(A.B).C
(kết hợp)
A cấp mxn, B và cấp nxp
A.(B+C)=A.B+A.C (phân phối)
A,B cấp mxn , C cấp nxp
(A+B).C=A.C+B.C (phân phối)
c. Thuật tốn cộng hai ma trận :
Giả sử rằng C=[cij]mn, là tổng của ma trận A=[aij]mnvà ma trận B=[bij]mn. Thuật tốn
dựa trên định nghĩa cộng ma trận được biểu diễn dưới dạng giả mã như sau :
Thuật tốn 1: Cộng ma trận
Procedure cong_ma_tran (A, B: ma tran)
Begin
for i : =1 to m
for j :=1 to n
cij := aij + bij;
End;
d. Thuật tốn nhân ma trận :
Định nghĩa của tích hai ma trận dẫn tới thuật tốn tính tích của hai ma trận. Giả sử
rằng C=[cij]mn, là tích của ma trận A=[aiq]mkvà ma trận B=[bqj]kn. Thuật tốn dựa trên định
nghĩa nhân ma trận được biểu diễn dưới dạng giả mã như sau :
Thuật tốn2: Nhân ma trận
Procedure nhan_ma_tran (A, B: ma tran)
Begin
for i : =1 to m
forj :=1 to n
begin
cij = 0;
17
fork := 1 to q do
cij := cij + aikbkj;
end;
End; {C = [cij] là tích của A và B}
1.3. Chuyển vị và luỹ thừa các ma trận
Định nghĩa1.4: Ma trận đồng nhất (hay cịn gọi là ma trận đơn vị) bậc n là ma trận
In=[ ij]nn với ij = 1 nếu i = jvà ij = 0 nếu i j. Do đó:
Nhân một ma trận với ma trận đơn vị kích thước thích hợp khơng làm thay đổi ma
trận đó. Nói cách khác, khi A là ma trận m x n, ta có:
Ain = ImA = A
Người ta cũng có thể định nghĩa luỹ thừa của các ma trận vng khi A là một ma
trận n x n, ta có:
Phép tốn chuyển hàng thành cột và cột thành hàng của một ma trận vng cũng
được sử dụng trong nhiều thuận tốn.
Định nghĩa 1.5: Cho A = [aij] là ma trận cấp m x n. Chuyển vị của A được ký hiệu
t
là A , là ma trận n x m nhận được bẳng cách trao đổi các hàng và cột của ma trận A cho
nhau. Nói cách khác, nếu At = [bij] thì bij = aji với i = 1, 2, ..., m.
Ví dụ 1.6: Chuyển vị của ma trận
Các ma trận khơng đổi khi trao đổi các hàng và cột của nó cho nhau thường đóng
vai trị quan trọng.
Định nghĩa 1.6: Một ma trận vng A được gọi là đối xứng nếu A =At. Như vậy A
= [aij] là đối xứng nếu aij = aji với mọi i và j ; 0 i n và 0 j n.
Chú ý rằng một ma trận là đối xứng nếu và chỉ nếu nó là ma trận vng và đối
xứng qua đường chéo chính của nó.Phép đối xứng này được minh hoạ trên hình 2.2.
Hình 2.2 : Ma trận đối xứng
Ví dụ 7 : Ma trận đối xứng
1.4. Các ma trận 0 1 (khơng một)
Các ma trận có các phần tử là 0 hoặc 1 được gọi là các ma trận khơng một. Các
ma trận khơng một thường được dùng để biểu diễn các cấu trúc rời rạc. Các thuật tốn
dùng các cấu trúc này dựa trên số học Boole cho các ma trận khơng một. Số học này lại
dựa trên các phép tốn Boole và thực hiện trên các cặp bit và được định nghĩa bởi:
18
Định nghĩa 1.7:Cho A = [aij] là các ma trận khơng một m x n. Khi đó hợp của A và
B, được ký hiệu là A B là ma trận khơng một với phần tử ở vị trí (i, j) là a ij bij. Giao của
A và B được ký hiệu là A B, là ma trận khơng, một với phần tử ở vị trí (i, j) là aij bij.
Ví dụ 1.7:Tìm hợp giao của các ma trận khơng – một sau :
A= B=
Giải :
Hợp của A và B là :
Giao của A và B là :
Định nghĩa 1.8: Cho A = [aij] là ma trận khơng một m x k và B = [b ij] là ma trận
khơng một k x n. Khi đó tích Boole của A và B được ký hiệu là A B là ma trận m x n
với phần tử ở vị trí (i, j) [cij] là:
cij = (ai1
Chú ý rằng tích Boole của A và B nhận được bằng cách tương tự với tích thơng
thường của hai ma trận đó, nhưng với phép cộng được thay bằng phép và với phép nhân
được thay bằng phép . Dưới đây là ví dụ về tích Boole của các ma trận.
Ví dụ 1.9 : Tìm tích Boole của A với B, với:
Giải : Tích Boole A B được cho bởi:
A B =
= =
Thuật tốn3 dưới dạng giả mã sau đây mơ tả thuật tốn tính tích Boole của hai ma
trận.
Thuật tốn 3: Tích Boole
Procedure tich_Boole(A,B: các ma trận khơng một)
Begin
for i : = 1 to m
for j :=1 to n
begin
cij := 0;
for q :=1 to k
cij := cij (aiq bqj);
end;
End; {C=[cij] là tích Boole của A và B}
Chúng ta cũng có thể định nghĩa luỹ thừa Boole của các ma trận khơng một
vng.Các luỹ thừa này sẽ được dùng trong các nghiên cứu sau này về các đường trong đồ
19
thị, các đường này được dùng, chẳng hạn để mơ hình các đường liên lạc trong các mạng
máy tính.
Định nghĩa 1.9: Cho A là ma tận khơng một vng và r là một số ngun dương.
Luỹ thừa Boole bậc r của A được ký hiệu là A[r] với:
(A[r] là hồn tồn xác định vì tích Boole có tính chất kết hợp)
Chúng ta cũng có thể định nghĩa A[r] là In.
Ví dụ 1.10. Cho
Tìm A[r] với mọi n ngun dương.
Giải : Ta thấy ngay rằng :
A[2] = AA =
Ta cũng tìm được :
A[3] = A[2]A = và A[4] = A[3]A =
Tính thêm 1 lần nữa, ta được :
A[5] = A[4]A =
Có thể thấy rằng A[n] = A[5] với mọi n ngun dương khơng nhỏ hơn 5.
Số các phép tốn bit được dùng để tích Boole của hai ma trận n x n cũng dễ dàng
xác định được.
Ví dụ 1.11: Có bao nhiêu phép tốn bit được dùng để tính A B với A, B là các ma
trận khơng một n x n.
Giải: Có n2phép tốn bit trong A B.
6. Thuật tốn
Mục tiêu:
Tính tốn chính xác độ phức tạp của thuật tốn;
Trả lời chính xác các bảng test về độ phức tạp của thuật tốn;
Ứng dụng đánh giá độ phức tạp thuật tốn trong thực tế.
7. Khái niệm thuật tốn
Định nghĩa 2.1:Thuật tốn (algorithm) là một dãy các quy tắc nhằm xác định một
dãy các thao tác trên các đối tượng sao cho sau một số hữu hạnbước thực hiện sẽ đạt
được mục tiêu đặt ra.
8. Các đặc trưng của thuật tốn
Đầu vào (Input): Một thuật tốn có các giá trị đầu vào từ một tập đã được chỉ rõ.
Đầu ra (Output): Từ mỗi tập các giá trị đầu vào, thuật tốn sẽ tạo ra các giá trị
đầu ra. Các giá trị đầu ra chính là nghiệm của bài tốn.
Tính dừng: Sau một số hữu hạn bước thuật tốn phải dừng.
Tính xác định: Ở mỗi bước, các bước thao tác phải hết sức rõ ràng, khơng gây
nên sự nhập nhằng. Nói rõ hơn, trong cùng một điều kiện hai bộ xử lý cùng thực
hiện một bước của thuật tốn phải cho những kết quả như nhau.
Tính hiệu quả: Trước hết thuật tốn cần đúng đắn, nghĩa là sau khi đưa dữ liệu
vào thuật tốn hoạt động và đưa ra kết quả như ý muốn.
20
Tính phổ dụng: Thuật tốn có thể giải bất kỳ một bài tốn nào trong lớp các bài
tốn. Cụ thể là thuật tốn có thể có các đầu vào là các bộ dữ liệu khác nhau trong
một miền xác định.
9. Ngơn ngữ thuật tốn
Có nhiều cách trình bày thuật tốn: dùng ngơn ngữ tự nhiên, ngơn ngữ lưu đồ (sơ đồ
khối), ngơn ngữ lập trình. Tuy nhiên, một khi dùng ngơn ngữ lập trình thì chỉ những lệnh
được phép trong ngơn ngữ đó mới có thể dùng được và điều này thường làm cho sự mơ tả
các thuật tốn trở nên rối rắm và khó hiểu.Hơn nữa, vì nhiều ngơn ngữ lập trình đều được
dùng rộng rãi, nên chọn một ngơn ngữ đặc biệt nào đó là điều người ta khơng muốn.Vì
vậy ở đây các thuật tốn ngồi việc được trình bày bằng ngơn ngữ tự nhiên cùng với
những ký hiệu tốn học quen thuộc cịn dùng một dạng giả mã để mơ tả thuật tốn.Giả mã
tạo ra bước trung gian giữa sự mơ tả một thuật tốn bằng ngơn ngữ thơng thường và sự
thực hiện thuật tốn đó trong ngơn ngữ lập trình.Các bước của thuật tốn được chỉ rõ bằng
cách dùng các lệnh giống như trong các ngơn ngữ lập trình.
Ví dụ 2.1:Mơ tả thuật tốn tìm phần tử lớn nhất trong một dãy hữu hạn các số ngun.
a) Dùng ngơn ngữ tự nhiên để mơ tả các bước cần phải thực hiện:
B1: Đặt giá trị cực đại tạm thời bằng số ngun đầu tiên trong dãy. (Cực đại tạm
thời sẽ là số ngun lớn nhất đã được kiểm tra ở một giai đoạn nào đó của thủ tục.)
B2: So sánh số ngun tiếp sau với giá trị cực đại tạm thời, nếu nó lớn hơn giá trị
cực đại tạm thời thì đặt cực đại tạm thời bằng số ngun đó.
B3: Lặp lại bước trước nếu cịn các số ngun trong dãy.
B4: Dừng khi khơng cịn số ngun nào nữa trong dãy. Cực đại tạm thời ở điểm này
chính là số ngun lớn nhất của dãy.
b) Dùng đoạn giả mã:
Proceduremax(a1, a2, ..., an: integers);
Begin
max:= a1;
for i:= 2 to n
if max
End; {max là phần tử lớn nhất}
Thuật tốn này trước hết gán số hạng đầu tiên a1 của dãy cho biến max.vịng lặp
“for” được dùng để kiểm tra lần lượt các số hạng của dãy. Nếu một sốhạng lớn hơn giá
trị hiện thời của max thì nó được gán làm giá trị mới của max.
Ví dụ 2.2: Tìm và in các số ngun tố nhỏ hơn số ngun dương n cho trước.
Giải:
Bước 1: Xây dựng thủ tục kiểm tra xem một số ngun dương m có phải là số
ngun tố hay khơng.
Bước 2: Sử dụng thủ tục này ta xây dựng thuật tốn bài tốn đặt ra.
* Thuật tốn kiểm tra một số ngun dương có phải là số ngun tố hay khơng.
21
Một số ngun dương m là số ngun tố nếu như tất cả các số ngun kể từ 2 đến
đều khơng phải là ước số của m. Do đó, trong thuật tốn ta thử xem nếu số dư của m chia
cho tất cả các số nằm giữa 2 và ln khác 0 thì là số ngun tố.
Đầu vào: số ngun dương m
Đầu ra: true nếu m là số ngun tố, false nếu ngược lại.
Function nguyen_to(m)
Begin
i := 2;
k := trunc(sqrt(m));
while (i<=k) and (m mod I<>0) doi:= i+1;
nguyen_to := i > k;
End;
* Thuật tốn tìm và in ra các ngun tố nhỏ hơn ngun dương n.
Thuật tốn này sử dụng thuật tốn ngun_to ở trên như là thủ tục con.
Đầu vào: số ngun dương n
Đầu ra: các số ngun tố nhỏ hơn n
Procedurelist_nguyen_to(n)
Begin
For i:= 2 to n=1 do
ifnguyen_to (i) then write (i,”);
End;
10. Độ phức tạp của thuật tốn
11.
Khái niệm về độ phức tạp của thuật tốn
Thước đo hiệu quả của một thuật tốn là thời gian mà máy tính sử dụng để giải bài
tốn theo thuật tốn đang xét, khi các giá trị đầu vào có một kích thước xác định. Một thước
đo thứ hai là dung lượng bộ nhớ địi hỏi để thực hiện thuật tốn khi các giá trị đầu vào có
kích thước xác định. Các vấn đề như thế liên quan đến độ phức tạp tính tốn của một
thuật tốn.Sự phân tích thời gian cần thiết để giải một bài tốn có kích thước đặc biệt nào
đó liên quan đến độ phức tạp thời gian của thuật tốn.Sự phân tích bộ nhớ cần thiết của
máy tính liên quan đến độ phức tạp khơng gian của thuật tốn.Việc xem xét độ phức tạp
thời gian và khơng gian của một thuật tốn là một vấn đề rất thiết yếu khi các thuật tốn
được thực hiện.Biết một thuật tốn sẽ đưa ra đáp số trong một micro giây, trong một phút
hoặc trong một tỉ năm, hiển nhiên là hết sức quan trọng. Tương tự như vậy, dung lượng
bộ nhớ địi hỏi phải là khả dụng để giải một bài tốn,vì vậy độ phức tạp khơng gian cũng
cần phải tính đến.Vì việc xem xét độ phức tạp khơng gian gắn liền với các cấu trúc dữ
liệu đặc biệt được dùng để thực hiện thuật tốn nên ở đây ta sẽ tập trung xem xét độ phức
tạp thời gian.
Độ phức tạp thời gian của một thuật tốn có thể được biểu diễn qua số các phép
tốn được dùng bởi thuật tốn đó khi các giá trị đầu vào có một kích thước xác định.Sở dĩ
độ phức tạp thời gian được mơ tả thơng qua số các phép tốn địi hỏi thay vì thời gian thực
22
của máy tính là bởi vì các máy tính khác nhau thực hiện các phép tính sơ cấp trong những
khoảng thời gian khác nhau. Hơn nữa, phân tích tất cả các phép tốn thành các phép tính bit
sơ cấp mà máy tính sử dụng là điều rất phức tạp.
Ví dụ2.3: Xét thuật tốn tìm số lớn nhất trong dãy n số a 1, a2, ..., an. Có thể coi kích
thước của dữ liệu nhập là số lượng phần tử của dãy số, tức là n. Nếu coi mỗi lần so sánh
hai số của thuật tốn địi hỏi một đơn vị thời gian (giây chẳng hạn) thì thời gian thực hiện
thuật tốn trong trường hợp xấu nhất là n1 giây. Với dãy 64 số, thời gian thực hiện thuật
tốn nhiều lắm là 63 giây.
Ví dụ2.4: Thuật tốn về trị chơi “Tháp Hà Nội”
Trị chơi “Tháp Hà Nội” như sau: Có ba cọc A, B, C và 64 cái đĩa (có lỗ để đặt vào
cọc), các đĩa có đường kính đơi một khác nhau. Ngun tắc đặt đĩa vào cọc là: mỗi đĩa chỉ
được chồng lên đĩa lớn hơn nó. Ban đầu, cả 64 đĩa được đặt chồng lên nhau ở cột A; hai
cột B, C trống. Vấn đề là phải chuyển cả 64 đĩa đó sang cột B hay C, mỗi lần chỉ được di
chuyển một đĩa.
Xét trị chơi với n đĩa ban đầu ở cọc A (cọc B và C trống). Gọi Sn là số lần chuyển
đĩa để chơi xong trị chơi với n đĩa.
Nếu n=1 thì rõ ràng là S1=1.
Nếu n>1 thì trước hết ta chuyển n1 đĩa bên trên sang cọc B (giữ n đĩa thứ n ở
dưới cùng của cọc A). Số lần chuyển n1 đĩa là S n1. Sau đó ta chuyển đĩa thứ n từ cọc A
sang cọc C. Cuối cùng, ta chuyển n1 đĩa từ cọc B sang cọc C (số lần chuyển là Sn1).
Như vậy, số lần chuyển n đĩa từ A sang C là:
Sn= Sn1+ 1+ Sn= 2Sn1+ 1=2(2Sn2+ 1) + 1 = 22Sn2+ 2 + 1 = ... = 2n1S1+ 2n2+ ... + 2+1 =
2n1.
Thuật tốn về trị chơi “Tháp Hà Nội” địi hỏi 264 1 lần chuyển đĩa (xấp xỉ 18,4 tỉ tỉ
lần). Nếu mỗi lần chuyển đĩa mất 1 giây thì thời gian thực hiện thuật tốn xấp xỉ 585 tỉ
năm!
Hai thí dụ trên cho thấy rằng: một thuật tốn phải kết thúc sau một số hữu hạn
bước, nhưng nếu số hữu hạn này q lớn thì thuật tốn khơng thể thực hiện được trong
thực tế.
Ta nói: thuật tốn trong Ví dụ 2.3 có độ phức tạp là n1 và là một thuật tốn hữu
hiệu (hay thuật tốn nhanh); thuật tốn trong Ví dụ 2.4 có độ phức tạp là 2n1 và đó là một
thuật tốn khơng hữu hiệu (hay thuật tốn chậm).
12.
So sánh độ phức tạp thuật tốn
Thơng thường trong các ứng dụng thực tế, thời gian chính xác mà thuật tốn địi hỏi
để thực hiện nó ít được quan tâm hơn so với việc xác định mức độ tăng lên của thời gian
thực hiện thuật tốn khi kích thước của dữ liệu đầu vào tăng lên. Chẳng hạn một thuật
tốn đang được xem xét nào đó có thời gian tính trong trường hợp tồi nhất là :t(n) = 30n2 +
6n + 6 với đầu vào kích thước n.
n
t(n) = 30n2 + 6n + 6
30n2
10
3066
3000
23
100
1000
10000
300606
30006006
3000060006
300000
30000000
3000000000
Khi n lớn thì ta có thể lấy xấp xỉT(n) = 0.5n2 + 0.1n + 0.1 sẽ cho ta thời gian tính cho
bằng phút. Khi mơ tả tốc độ tăng thời gian tính của thuật tốn khi kích thước đầu vào tăng
ta chỉ quant âm đến số hạng trội (30n2), có thể bỏ qua các hằng số.
Với giả thiết như vậy, thời gian tính T(n) tăng gống như n 2 khi n tăng. Việc làm ở
đây là thay thế biểu thức T(n) = 0.5n2 + 0.1n + 0.1 bởi n2 có cùng tốc độ tăng với T(n). Ta đi
đến định nghĩa sau :
Định nghĩa 2.2:Giả sử f và g là các hàm đối số ngun dương.
Ta nói f(n) có bậc khơng q g(n), ký hiệu f(n) = O(g(n)), nếu tồn tại hằng số
dương C1 và số ngun dương N1 sao cho |f(n)| C1|g(n)| với mọi n N1.
Ta nói f(n) có bậc ít nhất là g(n), ký hiệu f(n) = (g(n)), nếu tồn tại hằng số
dương C2 và số ngun dương N2 sao cho |f(n)| C2|g(n)| với mọi n N2.
Ta nói f(n) có bậc là g(n), ký hiệu, nếu f(n) = O(g(n)) và f(n) = (g(n)).
Ví dụ 2.5: Xét hàm f(n) = 60n2 +9n +9
Do 60n2 +9n +9 60n2 +9n2 +n2 = 70n2 với mọi n 1
Chọn C1 = 70 theo định nghĩa ta có: f(n)=O(n2),
Do 60n2 +9n +9 60n2 với mọi n 1
Chọn C2 = 70 theo định nghĩa ta có: f(n)= (n2),
Từ đó ta có f(n) = (n2)
Định nghĩa 2.3:
Nếu thuật tốn địi hỏi thời gian tính tốt nhất là t(n) với kích thước đầu vào n và
t(n) = O(g(n)) ta nói thời gian tính tốt nhất của thuật tốn có bậc khơng q g(n)
hay thời gian tính tốt nhất của thuật tốn là O(g(n)).
Nếu thuật tốn địi hỏi thời gian tính tồi nhất là t(n) với kích thước đầu vào n và
t(n) = O (g(n)) ta nói thời gian tính tồi nhất của thuật tốn có bậc khơng q g(n)
hay thời gian tính tồi nhất của thuậttốn là O(g(n)).
Nếu thuật tốn địi hỏi thời gian tính trung bình là t(n) với kích thước đầu vào n
và t(n) = O(g(n)) ta nói thời gian trung bình của thuật tốn có bậc khơng q g(n)
hay thời gian tính trung bình của thuật tốn là O(g(n)).
Trong định nghĩa trên, nếu thay O bởi và khơng q bởi ít nhất ta có bậc ít nhất
của thời gian tính tốt nhất, tồi nhất và trung bình của thuật tốn. Nếu thời gian tính tốt
nhất của thuật tốn vừa là O(g(n)) vừa là (g(n)), tá nói thời gian tính tốt nhất của thuật
tốn là (g(n)). Tương tự như vậy ta cũng định nghĩa thời gian tính tồi nhất và trung bình
của thuật tốn là (g(n)).
Cần đánh giá thời gian tính tốt nhất, tồi nhất và trung bình của thuật tốn so với
kích thước đầu vào n. Thời gian tính của thuậ tốn có thể đánh giá bởi số lần thực hiện
câu lệnh trong vòng lặop repeat.
24
Nếu a1 = x thì câu lệnh i:=i+1 trong thân vịng lặp repeat thực hiện một lần. Do đó
thời gian tính tốt nhất của thuật tốn là (1).
Nếu x khơngcó mặt trong dãy đã cho, thì câu lệnh i:=i+1 thực hiện n lần. Do đó
thời gian tính tốt nhất của thuật tốn là (1).
Cuối cùng ta tìm thời gian tính trung bình của thuật tốn. Nếu x tìm thấy ở vị trí
thứ i của dãy (x = ai) thì câu lệnh i:=i+1 phải thực hiện i lần (i = 1,2, ...n); nếu x khơng có
mặt trong dãy đã cho thì câu lệnh i := i+1 thực hiện n lần. Từ đó suy ra số lần trung bình
phải thực hiện câu lệnh i :=i+1 là :
[(1+2+... + n) + n]/ (n+1) (n2 + n)/(n + 1) = n
Vậy thời gian tính trung bình của thuật tốn là O(n).
Mặt khác, do
[(1 + 2 + ... + n)]/(n+1) (n2/4 + n)/(n+1) (n2/4 + n/4)/(n+1) = n/4 nên thời gian
tính trung bình của thuật tốn là (n).
13.
Đánh giá độ phức tạp của thuật tốn
Một điều quan trọng cần phải biết là máy tính phải cần bao lâu để giải xong một
bài tốn.Thí dụ, nếu một thuật tốn địi hỏi 10 giờ, thì có thể cịn đáng chi phí thời gian máy
tính địi hỏi để giải bài tốn đó.Nhưng nếu một thuật tốn địi hỏi 10 tỉ năm để giải một bài
tốn, thì thực hiện thuật tốn đó sẽ là một điều phi lý. Một trong những hiện tượng lý thú
nhất của cơng nghệ hiện đại là sự tăng ghê gớm của tốc độ và lượng bộ nhớ trong máy
tính. Một nhân tố quan trọng khác làm giảm thời gian cần thiết để giải một bài tốn là sự
xử lý song song đây là kỹ thuật thực hiện đồng thời các dãy phép tính. Do sự tăng tốc độ
tính tốn và dung lượng bộ nhớ của máy tính, cũng như nhờ việc dùng các thuật tốn lợi
dụng được ưu thế của kỹ thuật xử lý song song, các bài tốn vài năm trước đây được xem
là khơng thể giải được, thì bây giờ có thể giải bình thường.
Các thuật ngữ thường dùng cho độ phức tạp của một thuật tốn
Dạng đánh giá
Tên gọi
(1)
(log2n)
(n)
(nlog2n)
(n2)
(n3)
(nm)
(mn), m 2
(n!)
Hằng số
Logarithm
Tuyến tính
n log n
Bậc hai
Bậc ba
Đa thức
Hàm mũ
Giai thừa
Hình 2.1: Các đánh giá thơng dụng
Trong bảng, các đánh giá được sắp xếp theo thứ tự tăng dần của tốc độ tăng (ngoại
trừ trường hợp (nm))
25
Bảng dưới đây cho ta thấy thời gian tính tăng như thế nào với các đánh giá khác
nhau khi sử dụng đơn vị thời gian 0,001 giây (những số có đơn vị kèm theo là những số gần
đúng).
Thời gian tính nếu n =
Đánh giá
1
log2n
n
nlog2n
n2
n3
2n
N !
2
8
32
64
0,001
1
2
2
4
8
4
2
0,001
3
8
24
64
512
256
40,3 giây
0,001
5
32
160
1,02 giây
32,7 giây
49,71 giây
8,34.1023 năm
0,001
6
24
384
4,09 giây
4,36 giây
5,85 . 108 năm
4,02.1078 năm
Hình 2.2: Thời gian máy tính được dùng bởi một thuật tốn
Bài tập chương1102
Bài 1 : Cho vàf(x) = 3x2 2x + 5.
Hãy tính f (A)?
Bài 2 :Tìm Anvới
Bài 3 :Hãy viết ma trận hệ số hệ phương trình :
a)
b)
Bài 4 : Cho ma trận :
và I là ma trận đơn vị cấp 3.
Hãy tính A + 2I ?
Bài 5 :Cho 2 ma trận :
;
Hãy tính AB và BA ?
Bài 6 :Cho ma trận:
Hãy tính A2và A2 + 5A
Bài 7: Chứng minh rằng:
a.= O(x)
b.2n+ 17 = O(3n)
Bài 8: Tìm một số ngun n nhỏ nhất sao cho f(x)=O(xn), nếu:
a. f(x)=2x3 + x2lgx