Giáo trình Toán rời rạc (Giáo trình dành cho sinh viên ngành công nghệ thông tin) - Vũ Kim Thành - Trường Đại Học Quốc Tế Hồng Bàng

20 41 0
Giáo trình Toán rời rạc (Giáo trình dành cho sinh viên ngành công nghệ thông tin) - Vũ Kim Thành - Trường Đại Học Quốc Tế Hồng Bàng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

- ðộ phức tạp thời gian của thuật toán, ñộ phức tạp này ñược thể hiện qua số lượng các câu lệnh về các phép gán, các phép tính số học, phép so sánh, … ñược sử dụng trong thuật toán kh[r]

(1)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 0

BỘ GIÁO DỤC VÀ ðÀO TẠO

TRƯỜNG ðẠI HỌC NÔNG NGHIỆP HÀ NỘI

VŨ KIM THÀNH

TỐN RI RC

(Giáo trình dành cho sinh viên ngành công ngh thông tin)

(2)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 1 MC LC

Lời nói đầu

Chng 1 THUẬT TOÁN ðịnh nghĩa

2 Mơ tả thuật tốn lưu đồ

3 Mơ tả thuật tốn ngôn ngữ Pascal ðộ phức tạp thuật tốn

5 Thuật tốn tìm kiếm Thuật tốn đệ quy

7 Một số thuật toán số nguyên BÀI TẬP CHƯƠNG

7 14 18 19 23 28 Chng BÀI TOÁN ðẾM

1 Nguyên lý cộng nguyên lý nhân Chỉnh hợp Hoán vị Tổ hợp Nguyên lý bù trừ

4 Giải hệ thức truy hồi Bài toán liệt kê Bài toán tồn

BÀI TẬP CHƯƠNG

32 32 35 42 44 51 61 64 Chng CÁC KHÁI NIỆM CƠ BẢN VỀ ðỒ THỊ

1 Các ñịnh nghĩa ñồ thị biểu diễn hình học ñồ thị Biểu diễn ñồ thị ñại số

3 Sự ñẳng cấu ñồ thị Tính liên thơng đồ thị

5 Số ổn định trong, số ổn định ngồi nhân ñồ thị Sắc số ñồ thị

BÀI TẬP CHƯƠNG

69 69 79 82 84 88 91 93 Chng ðỒ THỊ EULER, ðỒ THỊ HAMILTON, ðỒ THỊ PHẲNG

1 ðồ thị Euler ðồ thị Hamilton ðồ thi phẳng

BÀI TẬP CHƯƠNG

98 98 103 108 113 Chng CÂY VÀ MỘT SỐ ỨNG DỤNG CỦA CÂY

1 Cây tính chất Cây nhị phân phép duyệt Một vài ứng dụng

(3)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 2 Cây khung (cây bao trùm) ñồ thị

5 Hệ chu trình ñộc lập Cây khung nhỏ BÀI TẬP CHƯƠNG

131 134 136 142 Chng MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ðỒ THỊ

1 Bài tốn đường ngắn ñồ thị Tâm, Bán kính, ðường kính ñồ thị Mạng Luồng

4 Bài toán du lịch

BÀI TẬP CHƯƠNG

147 147 152 153 160 166 Chng ðẠI SỐ BOOLE

1 Hàm Boole Biểu thức Boole

3 ðịnh nghĩa ñại số Boole theo tiên ñề Biểu diễn hàm Boole

5 Các cổng logic

6 Tối thiểu hoá hàm Boole

BÀI TẬP CHƯƠNG

172 172 174 176 177 183 185 193 Ph chng ðẠI CƯƠNG VỀ TỐN LOGIC

1 Lơgic mệnh đề

2 Cơng thức đồng cơng thức đồng lơgic mệnh đề

3 ðiều kiện đồng lơgic mệnh ñề Lôgic vị từ

BÀI TẬP PHỤ CHƯƠNG

197 197 201 205 208 213 Một số tập làm máy tính

Một số thuật ngữ dùng giáo trình Tài liệu tham khảo

(4)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 3

LI NĨI ðẦU

Tốn Rời rạc (Discrete mathematics) mơn tốn học nghiên cứu đối tượng rời rạc Nó ứng dụng nhiều ngành khoa học khác nhau, ñặc biệt tin học q trình xử lý thơng tin máy tính thực chất q trình rời rạc

Phạm vi nghiên cứu Toán Rời rạc rộng, chia thành mơn học khác Theo quy định chương trình mơn học, giáo trình đề cập đến lĩnh vực: Thuật tốn tốn đếm; Lý thuyết đồ thị; ðại số Logic ñược chia thành chương:

- Chương ñề cập ñến vấn đề Thut tốn ñộ phức tạp thời gian thuật toán

- Chương nói nguyên lý Bài tốn đếm.

- Các chương 3, 4, trình bày Lý thuyết ñồ th ng dng. ðây phần chiếm tỷ trọng nhiều giáo trình Trong có chương khái niệm ñồ thị, ñồ thị ñặc biệt ñồ thị Euler, ñồ thị Hamilton, ñồ thị phẳng, Cây ứng dụng ñồ thi ñặc biệt Riêng chương dành cho vấn ñề trọng số tốn tối ưu đồ thị tốn tối ưu ñược giải cách ứng dụng lý thuyết ñồ thị

- Chương kiến thức ðại s Boole, công cụ hữu hiệu việc thiết kế mạch ñiện, ñiện tử

Cuối giáo trình phụ chương: Nhng khái nim cơ bn v tốn Logic để người học tự nghiên cứu thêm Toán Logic

Trong chương chúng tơi cố gắng trình bày kiến thức chương thí dụ minh họa cụ thể Vì khn khổ số tiết học nên lược bỏ số chứng minh phức tạp Cuối chương có tập ñể người học ứng dụng, kiểm chứng lý thuyết ñã học, ñồng thời cung cấp số ñáp số tập ñã cho

Cũng cần nói thêm tốn Rời rạc khơng ứng dụng tin học mà cịn ứng dụng nhiều ngành khoa học khác Bởi giáo trình có ích cho cần quan tâm đến ứng dụng khác môn học

Tác giả xin chân thành cảm ơn bạn ựồng nghiệp ựã ựộng viên góp ý cho việc biên soạn giáo trình đặc biệt chúng tơi xin cảm ơn Nhà giáo ưu tú Nguyễn đình Hiền ựã hiệu ựắnh cho nhiều ý kiến ựóng góp bổ ắch thiết thực

Vì trình độ có hạn giáo trình ñược biên soạn lần ñầu nên không tránh khỏi thiếu sót Tác giả mong nhận ý kiến đóng góp đồng nghiệp bạn đọc khiếm khuyết sách

(5)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 4

CHƯƠNG1

THUẬT TOÁN

1 ðịnh nghĩa

2 Mơ tả thuật tốn lưu đồ

3 Mơ tả thuật tốn ngơn ngữ Pascal

3.1 Câu lệnh Procedure (thủ tục) Function (hàm) 3.2 Câu lệnh gán

3.3 Khối câu lệnh 3.4 Câu lệnh diều kiện 3.5 Các câu lệnh lặp ðộ phức tạp thuật toán

4.1 Khái niệm ñộ tăng hàm 4.2 ðộ tăng tổ hợp hàm 4.3 ðộ phức tạp thuật tốn Thuật tốn tìm kiếm

5.1 Thuật tốn tìm kiếm tuyến tính (cịn gọi thuật tốn tìm kiếm tuần tự) 5.2 Thuật tốn tìm kiếm nhị phân

6 Thuật tốn đệ quy

6.1 Cơng thức truy hồi 6.2 Thuật tốn đệ quy 6.3 ðệ quy lặp

7 Một số thuật toán số nguyên 7.1 Biểu diễn số nguyên

7.2 Cộng nhân hệ nhị phân

1 ðịnh nghĩa

Thuật toán (algorithm) dãy quy tắc nhằm xác ñịnh dãy thao tác ñối tượng cho sau số hữu hạn bước thực ñạt ñược mục tiêu ñặt

Từ định nghĩa thuật tốn cho thấy đặc trưng (tính chất) thuật tốn là:

a Yếu t vào, ra:

• ðầu vào (Input): Mỗi thuật tốn có giá trị giá trị ñầu vào

từ tập xác định rõ

• ðầu (Output): Từ giá trị đầu vào, thuật tốn cho giá trị cần

(6)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 5 b Tính dng:

Sau số hữu hạn bước thao tác thuật toán phải kết thúc cho kết c Tính xác định:

Các thao tác phải rõ ràng, cho kết dù ñược xử lý xử lý khác (hai xử lý điều kiện khơng thể cho hai kết khác nhau)

d Tính hiu qu

Sau đưa liệu vào cho thuật tốn hoạt ñộng phải ñưa kết ý muốn e Tính tng qt

Thuật tốn phải áp dụng cho tốn dạng khơng phải cho tập ñặc biệt giá trị ñầu vào

Có nhiều cách mơ tả thuật tốn như: Dùng ngơn ngữ tự nhiên; dùng lưu đồ (sơ đồ khối); dùng ngơn ngữ lập trình (trong giáo trình dùng loại ngơn ngữ mơ tả gần ngơn ngữ lập trình Pascal gọi Pascal); …

2 Mơ t thut tốn bng lưu đồ

Sau có thuật tốn để giải tốn, trước chuyển sang ngơn ngữ lập trình, người ta thường phải thể thuật toán dạng sơ ñồ Sơ ñồ ñó gọi lưu ñồ thuật tốn Các ký hiệu quy ước dùng lưu đồ ñược trình bày bảng

Bảng Các ký hiệu quy ước dung lưu đồ thuật tốn Tên ký hiệu Ký hiệu Vai trò ký hiệu Khối mở ñầu

kết thúc

Dùng để mở đầu kết thúc thuật tốn

Khối vào ðưa liệu vào in kết Khối tính tốn Biểu diễn cơng thức tính tốn

và thay đổi giá trị đối tượng Khối ñiều kiện Kiểm tra ñiều kiện phân nhánh Chương trình Gọi chương trình

Hướng thuật tốn

Hướng chuyển thơng tin, liên hệ khối

Thí d: Thuật tốn giải phương trình bậc hai ax2 + bx + c = gồm bước sau: 1) Xác ñịnh hệ số a, b, c (thông tin ñầu vào)

2) Kiểm tra hệ số a:

- Nếu a = 0: Phương trình cho phương trình bậc nhất, nghiệm là:

(7)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 6 3) Tính biệt thức ∆ = b2 – 4ac

4) Kiểm tra dấu biệt thức ∆

- Nếu ∆ ≥ 0: Phương trình có nghiệm thực

- Nếu ∆ < 0: Phương trình có nghiệm phức

5) In kết

Lưu đồ thuật tốn trình bày hình

3 Mơ t thut tốn bng ngơn ng phng Pascal

ðể giải toán máy tính điện tử phải viết chương trình theo ngơn ngữ lập trình (Pascal, C, Basic, ) Mỗi ngơn ngữ lập trình có quy tắc cấu trúc riêng ðể thay việc mơ tả thuật tốn lời, mơ tả thuật tốn cấu trúc lệnh tương tự ngơn ngữ lập trình Pascal gọi ngôn ngữ Pascal

Các câu lệnh dùng để mơ tả thuật tốn gồm có: Procedure Function; câu lệnh gán; câu lệnh ñiều kiện; vịng lặp Ngồi cần giải thích câu lệnh lời, để lời giải thích dấu (* *) {…}

Nghĩa ngơn ngữ Pascal hồn tồn tương tự ngơn ngữ lập trình Pascal, khơng có phần khai báo Tuy nhiên, phải nêu rõ ñầu vào (Input) đầu (output) thuật tốn

Bắt ñầu Nhập a, b, c

Sai a = ∆ = b2 = 4ac

b c x=−

Sai ∆≥

Phần thực = a

b

2a b x1

+ − =

Phần ảo =

2a ∆ −

2a b x2

∆ + − =

Thông báo kết

Kết thúc

(8)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 7 3.1 Câu lệnh Procedure (thủ tục) Function (hàm)

ðứng sau câu lệnh tên thủ tục hoăc tên hàm Các bước thực thuật tốn mơ tả thủ tục (hàm) bắt đầu từ khóa begin kết thúc từ khóa end

Thí d

Function Max(a, b, c) (* Hàm tìm số lớn số a, b, c *) Begin

(* thân hàm*) End;

Thí d

Procedure Giai_phuong_trình_bac_hai (* Thủ tục giải phương trình bậc hai *) Begin

(* thân thủ tục *) End;

Chú ý rằng, mơ tả thuật tốn function, trước kết thúc (end) thuật toán phải trả (ghi nhận) giá trị function

3.2 Câu lệnh gán

Dùng ñể gán giá trị cho biến Cách viết: Tên biến := giá trị gán Thí d: x := a; (*biến x gán giá trị a*) max := b; (*biến max ñược gán giá trị b*) 3.3 Khối câu lệnh

ðược mở đầu từ khóa begin kết thúc end sau: begin

Câu lệnh 1; Câu lệnh 2; Câu lệnh n;

end;

Các lệnh ñược thực từ câu lệnh thứ ñến câu lệnh cuối 3.4 Câu lệnh ñiều kiện

Có hai dạng: dạng đơn giản dạng lựa chọn a Dạng ñơn giản: Cách viết:

if <ñiều kiện> then câu lệnh khối câu lệnh;

(9)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Toán Ri rc…….……… 8 b Dạng lựa chọn: Cách viết:

if <ñiều kiện> then câu lệnh khối câu lệnh else câu lệnh khối câu lệnh 2; Khi thực hiện, ñiều kiện ñược kiểm tra, điều kiện thỏa mãn câu lệnh (khối câu lệnh) ñược thực hiện, ñiều kiện khơng thỏa mãn câu lệnh (khối câu lệnh) thực

Thí d 1. Thuật tốn tìm số lớn số thực a, b, c - ðầu tiên cho max = a;

- So sánh max với b, b > max max = b; - So sánh max với c, c > max max = c Function max(a,b,c)

Input: số thực a,b,c;

Output: Số lớn số ñã nhập; Begin

x := a;

if b > x then x:= b; if c > x then x:= c; max := x;

End;

Thí d 2. Thuật tốn giải phương trình bậc hai ax2 + bx + c = Procedure Giai_phuong_trinh_bac2;

Input: Các hệ số a, b, c;

Output: Nghiệm phương trình; begin

if a = then x := -c/b; if a ≠ then

begin

∆ := b2 – 4ac;

if ∆≥ then

begin

x1 = (– b – ∆)/2a ;

x2 = (– b + ∆)/2a;

end else begin

Phần thực := -b/2a; Phần ảo := ( −∆)/2a; end;

(10)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 9 3.5 Các câu lệnh lặp

Có hai loại: Loại có bước lặp xác định loại có bước lặp khơng xác định a. Loại có bước lặp xác ñịnh: Cách viết sau:

for biến ñiều khiển := giá trị ñầu to giá trị cuối câu lệnh khối câu lệnh; Khi thực hiện, biến ñiều khiển ñược kiểm tra, biến ñiều khiển nhỏ giá trị cuối câu lệnh (khối câu lệnh) thực Tiếp biến ñiều khiển tăng thêm ñơn vị trình lặp lại biến điều khiển lớn giá trị cuối vịng lặp dừng cho kết Như hết vòng lặp for số bước lặp giá trị cuối (của biến ñiều khiển) trừ giá trị đầu cộng

Thí d: Tìm giá trị lớn dãy số a1, a2, …,an

Thuật toán: ðầu tiên cho giá trị lớn (max) a1, sau so sánh max

với số (i = 2, 3, …, n), max < max ai, max > max khơng đổi

Function max_day_so;

Input: Dãy số a1, a2, … ,an;

Output: Giá trị lớn (max) dãy số ñã nhập; begin

max := a1 ;

for i:= to n

if > max then max := ;

max_day_so := max; end;

Chú thích: Vịng lặp for cịn cách viết lùi biến ñiều khiển sau:

for biến ñiều khiển := giá trị cuối downto giá trị ñầu câu lệnh khối câu lệnh; Việc thực câu lệnh tương tự viết biến ñiều khiển tăng dần b Loại có bước lặp khơng xác ñịnh: Có hai cách viết

Cách th nht: while ñiều kiện do câu lệnh khối câu lệnh;

Khi thực hiện, ñiều kiện ñược kiểm tra, điều kiện thoả mãn câu lệnh (khối câu lệnh) thực Nếu điều kiện khơng thoả mãn vịng lặp dừng cho kết

Thí d: Kiểm tra xem số ngun dương m cho có phải số ngun tố khơng? Thuật toán sau: Số m số nguyên tố khơng chia hết cho số ngun dương khác nhỏ m

Thật vậy, m hợp số (không phải số nguyên tố), nghĩa tồn số nguyên dương a, b cho:

m = a.b ⇒ a ≤ m b ≤ m

(11)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 10 Procedure nguyento(m);

Input: Số nguyên dương m;

Output: True, m số nguyên tố; False, m số nguyên tố; begin

i := 2;

while i ≤ m

begin

if m mod i = then nguyento := false else nguyento := true;

i := i+1; end; end;

Cách th hai: repeat câu lệnh khối câu lệnh until ñiều kiện;

Khi thực hiện, câu lệnh (khối câu lệnh) thực hiện, sau điều kiện kiểm tra, điều kiện sai vịng lặp thực hiện, điều kiện vịng lặp dừng cho kết

Thí d: Thuật tốn Ơ-clit tìm ước số chung lớn hai số nguyên dương a, b sau: Giả sử a > b a chia cho b ñược thương q số dư r, a, b, q, r số nguyên dương:

a = bq + r suy ra: ƯCLN(a, b) = ƯCLN(b, r)

và số dư cuối khác không ước số chung lớn a b

Tht vy: Giả sử d ước số chung hai số ngun dương a b, đó: r = a – bq chia hết cho d Vậy d ước chung b r

Ngược lại, d ước số chung b r, bq + r = a chia hết cho d Vậy d ước số chung a b

Chẳng hạn, muốn tìm ước số chung lớn 111 201 ta làm sau: 201 = 111 + 90

111 = 90 + 21 90 = 21 +

21 = + =

Vậy ƯCLN(111, 201) = (3 số dư cuối khác 0) Function UCLN(a, b)

Input: a, b số nguyên dương; Output: UCLN(a, b);

(12)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 11 x := a;

y : = b; repeat

begin

r := x mod y; (* r phần dư chia x cho y *) x : = y; y := r ;

if y ≠ then uc := y;

end;

until y = 0; UCLN := uc; end ;

Chú ý: Khi giải toán phức tạp thường phải phân chia tốn thành toán nhỏ gọi toán Khi phải xây dựng thủ tục hàm để giải tốn đó, sau tập hợp tốn để giải tốn ban ñầu ñã ñặt Thuật ngữ tin học gọi chương trình giải tốn chương trình

Thí d: Tìm số ngun tố nhỏ lớn số nguyên dương m ñã cho Procedure So_nguyen_to_lon_hon(m);

Input: Số nguyên dương m;

Output: n số nguyên tố nhỏ lớn m; begin

n := m + 1;

while nguyento(n) = false n := n + 1; end;

4 ðộ phc tp ca thut tốn

Có hai lý làm cho thuật tốn ựúng khơng thực ựược máy tắnh máy tắnh không ựủ nhớ ựể thực thời gian tắnh toán dài Tương ứng với hai lý người ta ựưa hai khái niệm:

- ðộ phức tạp khơng gian thuật tốn, độ phức tạp gắn liền với cấu trúc liệu sử dụng Vấn đề khơng thuộc phạm vi môn học

- ðộ phức tạp thời gian thuật tốn, độ phức tạp thể qua số lượng câu lệnh phép gán, phép tính số học, phép so sánh, … sử dụng thuật tốn giá trị đầu vào có kích thước cho

4.1 Khái niệm ñộ tăng hàm

Trước hết xét thí dụ: Giả sử thời gian tính tốn thuật tốn phụ thuộc vào kích thước n đầu vào theo cơng thức:

(13)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 12 Bảng sau cho thấy n lớn, t(n) xấp xỉ số hạng 60n2 :

n t(n) = 60n2 + 9n + 60n2 10

100 000 10 000

9099 600 909 60 009 009 000 090 009

6000 600 000 60 000 000 000 000 000

ðịnh nghĩa: Cho f(x) g(x) hai hàm từ tập số nguyên tập số thực vào tập số thực Người ta nói f(x) O(g(x)) hay f(x) có quan hệ big-O với g(x), ký hiệu f(x) = O(g(x)), tồn hai số C k cho:

| f(x) | ≤ C | g(x) |, ∀x ≥ k

Thí d 1. t(n) = 60n2 + 9n + = O(n2)

Thật vậy: ∀n ≥ 1, ta có: | 60n2 + 9n +9| = 60n2 + 9n +9

=    

 

+ + 2

n n 60 n

≤ n2 (60 + + 9) = 78n2 Vậy C = 78; k =

Tương tự ta chứng minh:

Pn(x) = a0xn + a1xn-1 + + an = O(xn) , x ∈ R

Thí d 2. f(n) = + + + + n < n + n + n + + n = n.n = n2 Vậy f(n) = O(n2)

Thí d 3. Ta có: n! < nn , suy ra: n! = O(nn); (C = k = 1) Thí d 4. ∀n: n! < nn , lg(n!) < n lgn ,

suy lg(n!) = O(nlgn); (C = k = 1)

Thí d 5. Ta có: lgn < n , suy lgn = O(n) ; (C = k = 1)

Có thể hiểu đơn giản quan hệ f(x) = O(g(x)) f(x) g(x) "cùng cấp", nhiên g(x) hàm ñơn giản đại diện cho f(x) độ lớn tốc ñộ biến thiên 4.2 ðộ tăng tổ hợp hàm

ðịnh lý: Nếu f1(x) = O(g1(x)) f2(x) = O(g2(x))

Thì: 1) (f1 + f2)(x) = O(max{g1(x), g2(x)})

2) (f1.f2)(x) = O(g1(x).g2(x))

Chng minh: Theo giả thiết, ta có: | f1(x)| ≤ C1 | g1(x)) | , ∀x > k1

| f2(x)| ≤ C2 | g2(x)) | , ∀x > k2

Chọn k = max(k1; k2) hai bất đẳng thức thoả mãn Do đó:

1) |(f1 + f2)(x)| = |f1(x) + f2(x)| ≤ |f1(x)| + |f2(x)| ≤

≤ C1|g1(x)| + C2|g2(x)| ≤ (C1 + C2)g(x)

(14)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 13 2) |(f1.f2)(x)| = |f1(x)|.|f2(x)| ≤ C1C2 |g1(x)|.|g2(x)| = C1C2|g1(x)g2(x)|

H qu: Nếu f1(x) = O(g(x)), f2(x) = O(g(x)) (f1+f2)(x) = O(g(x))

Thí d. Cho đánh giá O hàm:

1/ f(n) = 2nlg(n!) + (n3+ 3)lgn , n ∈ N

2/ f(x) = (x + 1)lg(x2 + 1) + 3x2 , x ∈ R

Gii: 1) Ta có: lg(n!) = O(nlgn) ⇒ 2nlg(n!) = O(n2lgn) (n3 + 3)lgn = O(n3lgn) Vậy f(n) = O(n3lgn)

2) Ta có: lg(x2 + 1) ≤ lg2x2 = lg2 + 2lgx ≤ 3lgx , ∀x >

⇒ lg(x2 + 1) = O(lgx) ⇒ (x + 1)lg(x2 + 1) = O(xlgx)

Mặt khác: 3x2 = O(x2) max{xlgx; x2} = x2 Vậy f(x) = O(x2)

4.3 ðộ phức tạp thuật toán

Như nói phần đầu mục 4, ñề cập ñến ñộ phức tạp thời gian thuật toán ðộ phức tạp thời gian thuật tốn đánh giá qua số lượng

các phép tốn mà thuật tốn sử dụng Vì phải đếm phép tốn có thuật tốn Các phép tốn phải đếm là:

- Các phép so sánh số nguyên số thực; - Các phép tính số học: cộng, trừ, nhân, chia; - Các phép gán;

- Và phép tính sơ cấp khác xuất q trình tính tốn Giả sử số phép toán thuật toán f(n), n kích thước đầu vào, ñó người ta thường quy ñộ phức tạp thời gian thuật tốn mức:

• ðộ phức tạp O(1), gọi ñộ phức tạp số, f(n) = O(1)

• ðộ phức tạp O(logan), gọi ñộ phức tạp logarit, f(n) = O(logan) (ðiều kiện a

> 1)

• ðộ phức tạp O(n), gọi độ phức tạp tuyến tính, f(n) = O(n)

• ðộ phức tạp O(nlogan), gọi ñộ phức tạp nlogarit f(n) = O(logan) (ðiều kiện

a > 1)

• ðộ phức tạp O(nk), gọi ñộ phức tạp ña thức, f(n) = O(nk)

• ðộ phức tạp O(an), gọi ñộ phức tạp mũ, f(n) = O(an) (ðiều kiện a > 1) • ðộ phức tạp O(n!), gọi ñộ phức tạp giai thừa, f(n) = O(n!)

Thí d 1. Tìm độ phức tạp thuật tốn để giải tốn: Tìm số lớn dãy n số nguyên a1, a2, …, an ñã cho:

Procedure max(a1, a2, …, an);

Input: Dãy số a1, a2, , an;

Output: Số lớn (max) dãy số ñã cho; begin

max := a1;

(15)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 14 if > max then max := ai;

end;

Mỗi bước vòng lặp for phải thực nhiều phép toán: phép gán biến ñiều khiển i, phép so sánh với max phép gán vào max; vịng lặp có (n – 1)

bước (i = 2, 3, …, n) nhiều có thảy 3(n - 1) phép tốn phải thực Ngồi thuật tốn cịn phải thực phép gán max := a1

Vậy số phép toán nhiều mà thuật toán phải thực là: 3(n – 1) + = 3n – = O(n)

ðộ phức tạp thời gian thuật toán độ phức tạp tuyến tính Thí d 2. ðộ phức tạp thuật toán nhân ma trận

Procedure nhân_matran;

Input: ma trận A = (aij)m x p B = (bij)p x n;

Output: ma trận tích AB = (cij)m x n ;

Begin

for i:=1 to m for j:=1 to n begin

cij := 0;

for k:=1 to p cij := cij + aikbkj ;

end; End

Số phép cộng số phép nhân thuật toán là: Với phần tử cij phải thực

hiện p phép nhân p phép cộng Có tất m.n phần tử cij, phải thực 2mnp phép

cộng phép nhân

ðể xác ñịnh ñộ phức tạp thuật toán, ta giả sử A, B hai ma trận vuông cấp n, nghĩa m = n = p phải cần 2n3 phép cộng phép nhân Vậy ñộ phức tạp thuật tốn O(n3) – độ phức tạp đa thức

Một ñiều thú vị là, nhân từ ma trận trở lên số phép tính cộng nhân phụ thuộc vào thứ tự nhân ma trận Chẳng hạn A, B, C ma trận có kích thước tương ứng 30×20, 20×40, 40×10 Khi đó:

Nếu thực theo thứ tự ABC =A(BC) tích BC ma trận kích thước 20×10

cần thực 20.40.10 = 8000 phép tính cộng nhân Ma trận A(BC) có kích thước 30×10 cần thực 30.20.10 = 6000 phép cộng nhân Từ suy cần thực

8000+6000 = 14000 phép tính cộng nhân để hồn thành tích ABC

Tương tự, thực theo thứ tự ABC = (AB)C cần thực 30.20.40 phép tính cộng nhân để thực tích AB 30.40.10 phép cộng nhân để thực hiên tích (AB)C Do số phép tính cộng nhân phải thực để hồn thành tích ABC 24000+12000 = 36000 phép tính

(16)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 15

5 Thut tốn tìm kiếm

Bài tốn tìm kiếm phát biểu sau: Tìm dãy số a1, a2, …, an phần tử

có giá trị số a cho trước ghi lại vị trí phần tử tìm

Bài tốn có nhiều ứng dụng thực tế Chẳng hạn việc tìm kiếm từ từ điển, việc kiểm tra lỗi tả đoạn văn bản, …

Có hai thuật tốn để giải tốn này: Thuật tốn tìm kiếm tuyến tính thuật tốn tìm kiếm nhị phân Chúng ta xét thuật toán

5.1 Thuật tốn tìm kiếm tuyến tính (cịn gọi thuật tốn tìm kiếm tuần tự) ðem so sánh a với (i = 1, 2, …, n) gặp giá trị = a ghi lại vị trí

của ai, không gặp giá trị = a (ai≠ a ∀i) dãy khơng có số a

Procedure Tim_tuyen_tinh_phan_tu_bang_a; Input: a dãy số a1, a2, , an;

Output: Vị trí phần tử dãy có giá trị a, số khơng tìm thấy a dãy;

begin i := 1;

while (i ≤ n and ai≠ a) i := i + 1;

if i ≤ n then vitri := i else vitri := 0;

end;

Như a tìm thấy vị trí thứ i dãy (ai = a) câu lệnh i := i +

vịng lặp while thực i lần (i = 1, 2, …, n) Nếu a khơng tìm thấy, câu lệnh phải thực n lần Vậy số phép tốn trung bình mà thuật tốn phải thực là:

O(n)

1 n 2n

1) n(n n

n

1

= + = + = + + +

Vậy, độ phức tạp thuật tốn tìm kiếm tuyến tính độ phức tạp tuyến tính 5.2 Thuật tốn tìm kiếm nhị phân

Giả thiết phần tử dãy ñược xếp theo thứ tự tăng dần Khi so sánh a với số dãy, a < am với = + 

2 n

m (cần nhắc lại phần nguyên x: [x] số nguyên nhỏ có x) tìm a dãy a1, …,am , a > am tìm a dãy am+1, …, an ðối với dãy (một nửa dãy ñã cho) ñược làm tương tựñể phải tìm phần tử có giá trị a nửa dãy Q trình tìm kiếm kết thúc tìm thấy vị trí phần tử có giá trị a dãy phần tử

Chẳng hạn việc tìm số dãy số 5, 6, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22

ñược tiến hành sau:

Dãy ñã cho gồm 14 số hạng, chia dãy thành dãy con:

(17)

Trường ðại hc Nơng nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 16 Vì < 13 nên cần tìm dãy Tiếp tục chia đơi thành dãy: 5, 6, 8, 11, 12, 13; < nên lại phải tìm dãy 5, 6, 8, Lại chia ñôi dãy thành dãy 5, 8, thấy thuộc dãy 8, q trình tìm kiếm kết thúc, vị trí số dãy ñã cho thứ ba

Procedure Tim_nhi_phan_phan_tu_bang_a;

Input: a dãy số a1, a2, , an ñã xếp theo thứ tự tăng;

Output: Vị trí phần tử dãy có giá trị a, số khơng tìm thấy dãy;

Begin

i := 1; (* i ñiểm mút trái khoảng tìm kiếm*) j := n; (* j ñiểm mút phải khoảng tìm kiếm*) while i < j

begin

= + 

2 j :

m ;

if a > am then i := m+1 else j := m;

end;

if a = then vitri := i else vitri := 0; end;

ðộ phức tạp thuật tốn tìm kiếm nhị phân đánh sau: Khơng giảm

tổng qt giả sử ñộ dài dãy a1, a2, …, an n = 2k với k số nguyên dương (Nếu n lũy thừa 2, ln tìm số k cho 2k – < n < 2k

xem dãy cho phần dãy có 2k phần tử) Như phải thực nhiều k lần chia đơi dãy số (mỗi nửa dãy lần chia đơi thứ có 2k – phần tử, lần chia

đơi thứ hai có 2k – phần tử, …, lần chia đơi thứ k 2k – k = 20 = phần tử) Nói

cách khác nhiều có k vịng lặp while thực thuật tốn tìm kiếm nhị

phân Trong vịng lặp while phải thực hai phép so sánh, vòng lặp cuối phần tử phải thực phép so sánh để biết khơng cịn phần tử thêm phép so sánh ñể biết a có phải phần tử ñó hay khơng Từ thấy thuật tốn

phải thực nhiều 2k + = 2[log2n] + = O(logn) phép so sánh Vậy, ñộ phức tạp thuật tốn tìm kiếm nhị phân độ phức tạp logarit

6 Thut tốn đệ quy

6.1 Công thức truy hồi

(18)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 17 ðịnh nghĩa: ðịnh nghĩa truy hồi bao gồm quy tắc ñể xác định đối tượng, có số quy tắc dùng ñể xác ñịnh ñối tượng ban ñầu gọi ñiều kiện ban ñầu; quy tắc khác dùng ñể xác ñịnh ñối tượng gọi cơng thức truy hồi

Thí d 1. Dãy số an ñược ñịnh nghĩa ñệ quy sau:

a0 = 3; an = an – +

Trong a0 = điều kiện ban đầu, cịn an = an – + công thức truy hồi

Thí d 2. ðịnh nghĩa đệ quy giai thừa số tự nhiên n là: GT(0) = 1; GT(n) = n.GT(n – 1)

Vì GT(n) = n! = n(n-1)(n-2)…1 = n.GT(n-1) Trong GT(0) = ñiều kiện ban ñầu, GT(n) = n.GT(n – 1) cơng thức truy hồi

Thí d 3. Dãy số F0, F1, F2, …, Fn ñược ñịnh nghĩa:

F0 = 0; F1 = 1; Fn = Fn – + Fn –

chắnh ựịnh nghĩa ựệ quy dãy số có tên dãy Fibonacci Trong ựó F0 = 0, F1 = ựiều kiện ban ựầu, Fn = Fn Ờ + Fn Ờ công thức ựệ quy

Dễ thấy số số hạng ñầu tiên dãy là: 0; 1; 1; 2; 3; 5; 8; 13; 21; … 6.2 Thuật tốn đệ quy

Nhiều việc giải tốn với đầu vào xác định đưa việc giải tốn với giá trị đầu vào nhỏ Chẳng hạn:

n! = n (n-1)! hay UCLN(a, b) = UCLN(a mod b, b) , a > b

ðịnh nghĩa: Một thuật toán gọi đệ quy thuật tốn giải tốn cách rút gọn liên tiếp tốn ban đầu tới tốn với liệu đầu vào nhỏ

Dễ thấy sở thuật tốn cơng thức truy hồi Thí d 1. Tính giai thừa số tự nhiên n ñệ quy Function GT(n);

Input: Số tự nhiên n; Output: Giá trị n!; Begin

if n = then GT(0) :=

else GT(n) := n*GT(n – 1); End;

Thí d 2. Tính số hạng dãy Fibonacci đệ quy Function Fibonacci(n);

Input: Vị trí thứ n dãy Fibonacci; Output: Giá trị Fn dãy Fibonaci;

(19)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 18 if n = then Fibonacci(0) :=

else if n = then Fibonacci(1) :=

else Fibonacci(n) := Fibonacci(n-1) + Fibonacci(n-2); End;

Thí d 3. Thuật tốn đệ quy tìm UCLN(a, b) Function UCLN(a, b);

Input: Hai số nguyên dương a b; Output: Ước số chung lớn a b; Begin

if b = then UCLN(a, b) := a

else if a > b then UCLN(a, b) := UCLN(a mod b, b)

else UCLN(a, b) := UCLN(b mod a, a); End;

Bây thử tìm độ phức tạp thời gian vài thuật toán viết đệ quy Chẳng hạn xét thuật tốn đệ quy tính số hạng dãy Fibonacci, để tính Fn ta biểu

diễn Fn = Fn – + Fn – , sau thay hai số tổng hai số Fibonacci bậc

thấp Q trình tiếp tục F0 F1 xuất thay

giá trị chúng ñịnh nghĩa

Mỗi bước ñệ quy F0 F1 xuất hiện, số Fibonacci tính hai lần

Chẳng hạn giản đồ hình cho ta hình dung cách tính F5 theo thuật tốn đệ quy Từ

đó thấy để tính Fn cần thực Fn + – phép cộng

ðộ phức tạp thuật tốn đệ quy tìm ước số chung lớn hai số nguyên dương a, b (thí dụ 3): UCLN(a,b) = UCLN(a mod b,b), a ≥ b (a mod b phần dư chia a cho b) ñược ñánh giá cách ứng dụng dãy Fibonacci

Trước hết quy nạp toán học chứng minh số hạng tổng quát dãy Fibonacci thỏa mãn:

F5

F4 F3

F3 F2 F2 F1

F2 F1 F1 F0 F1 F0

F1 F0

(20)

Trường ðại hc Nông nghip Hà Ni – Giáo trình Giáo trình Tốn Ri rc…….……… 19 Fn > αn – 2, ∀n ≥ 3,

2 1+ =

α (1) Thật vậy:

Ta có: α < = F3, nghĩa (1) với n =

Giả sử Fn > αn – ñúng với n, xét với n+1 Dễ thấy α nghiệm phương trình

x2 – x – = nên suy α2 = α + Từđó:

αn – = α2αn – = (α + 1)αn – = αn – + αn –

Theo giả thiết quy nạp, n ≥ 4, ta có Fn – > αn – Fn > αn – Thay vào ñịnh

nghĩa dãy Fibonacci:

Fn + = Fn + Fn – > αn – + αn – = αn –

Vậy Fn > αn – , ∀n ≥

Cơng thức (1) chứng minh

Trở lại thuật tốn đệ quy tìm ước số chung lớn hai số nguyên dương a, b (a

≥ b) ðộ phức tạp thuật tốn đánh giá qua số lượng phép chia dùng thuật toán

ðặt r0 = a, r1 = b, ta có: r0 = r1q1 + r2; ≤ r2 < r1,

r1 = r2q2 + r3; ≤ r3 < r2,

rn – = rn – qn – + rn ; ≤ rn < rn – 1,

rn – = rn qn ;

Như phải dùng n phép chia để tìm rn = UCLN(a,b) Các thương q1, q2, …, qn – ln

lớn 1, cịn qn≥ Từđó suy ra:

rn ≥ = F2,

rn – ≥ 2rn = 2F2 = F3,

rn – ≥ rn – + rn ≥ F3 + F2 = F4,

r2 ≥ r3 + r4 ≥ Fn – + Fn – = Fn,

b = r1≥ r2 + r3≥ Fn + Fn – = Fn +

trong Fn số hạng thứ n dãy Fibonacci

Vậy n số phép chia thuật tốn Ơ-clit tìm ước số chung lớn hai số nguyên dương a, b b ≥ Fn + 1, Fn số Fibonacci thứ n

Do Fn + > αn – với n >

2 1+ =

α nên b > αn – Từđó: lgb > (n – 1) lgα >

5 n−

( lgα ≈ 0,208 >

5

Ngày đăng: 01/04/2021, 13:07

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan