Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
588,49 KB
Nội dung
1 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC VINH LÊ THANH XUÂN VỀ ĐỘ PHỨC TẠP CỦA CÁC THUẬT TOÁN SỐ HỌC LUẬN VĂN THẠC SĨ TOÁN HỌC Nghệ An, 12 2011 MỤC LỤC Trang Mục lục Mở đầu Chƣơng 1: Các kiến thức sở độ phức tạp thuật toán 1.1 Khái niệm thuật toán……………………………… 1.2 Các dạng diễn đạt thuật toán……………………… 11 1.3 Độ phức tạp thuật toán……………………………… 13 1.4 Đánh giá độ phức tạp thuật toán………………… 17 Chƣơng 2: Độ phức tạp thuật toán số học 20 2.1 Biểu diễn số nguyên phép tính số học ………… 20 2.2 Số nguyên tố………………………………………… 28 2.3 Thuật toán Euclid……………………………………… 38 2.4 Thuật toán J.Stein……………………………………… 41 2.5 Thuật toán Euclid mở rộng ……………………… 42 2.6 Phân số liên tục …………………………………… 43 Kết luận Tài liệu tham khảo 49 …………………………………… 50 MỞ ĐẦU Nếu trước thập kỷ 70 kỷ XX, Số học xem ngành lý thuyết xa rời thực tiễn nhất, ngày thành tựu Số học có ứng dụng trực tiếp vào vấn đề đời sống, thơng tin mật mã, kỹ thuật máy tính Một phương hướng Số học đời phát triển mạnh mẽ: Số học thuật tốn Có thể nói rằng, Số học thuật tốn - cầu nối Số học Tin học Sự phát triển Tin học đòi hỏi phải xây dựng lý thuyết toán học làm sở cho việc thiết lập thuật toán phần mềm Một lý thuyết tốn học lý thuyết Độ phức tạp thuật tốn Thời gian mà máy tính thực thuật tốn khơng phụ thuộc vào thân thuật tốn đó, ngồi cịn tùy thuộc máy tính Để đánh giá hiệu thuật tốn, xét số phép tính phải thực thực thuật tốn Thơng thường số phép tính thực phụ thuộc vào cỡ toán, tức độ lớn đầu vào Vì độ phức tạp thuật tốn hàm phụ thuộc đầu vào Tuy nhiên ứng dụng thực tiễn, khơng cần biết xác hàm mà cần biết ước lượng đủ tốt chúng Để ước lượng độ phức tạp thuật toán, ta thường dùng khái niệm bậc O-lớn bậc Θ (bậc Theta) Các độ phức tạp thường gặp thuật tốn thơng thường gồm có: - Độ phức tạp số, O(1) Số phép tính/thời gian chạy/dung lượng nhớ khơng phụ thuộc vào độ lớn đầu vào Chẳng hạn thao tác hệ thống: đóng, mở file - Độ phức tạp tuyến tính, O(n) Số phép tính/thời gian chạy/dung lượng nhớ có xu hướng tỉ lệ thuận với độ lớn đầu vào Chẳng hạn tính tổng phần tử mảng chiều - Độ phức tạp đa thức, O(P(n)), với P đa thức bậc cao (từ trở lên) Chẳng hạn thao tác tính tốn với mảng nhiều chiều (tính định thức ma trận) - Độ phức tạp lôgarit, O(logn) (chú ý: bậc thấp so với O(n)) Chẳng hạn thuật tốn Euclid để tìm ước số chung lớn - Độ phức tạp hàm mũ, O(2n) Với lý trình bày, chúng tơi chọn đề tài Luận văn “Về độ phức tạp thuật tốn số học” nhằm tìm hiểu sâu ứng dụng thuật toán số học Tin học Với mục đích đó, ngồi phần mở đầu kết luận, Luận văn chia làm hai chương Chƣơng Các kiến thức sở độ phức tạp thuật tốn Trong chương chúng tơi trình bày số kiến thức sở độ phức tạp thuật toán cần dùng cho chứng minh chương sau Chƣơng Độ phức tạp thuật tốn số học Trong chương chúng tơi trình bày kết sở độ phức tạp thuật toán, số thuật toán số học độ phức tạp số thuật toán số học Luận văn hoàn thành trường Đại học Vinh hướng dẫn tận tình, chu đáo nghiêm khắc thầy giáo, PGS.TS Nguyễn Thành Quang Tác giả xin bày tỏ lịng biết ơn sâu sắc đến thầy Tác giả xin chân thành cảm ơn Ban chủ nhiệm khoa Đào tạo Sau Đại học, Ban chủ nhiệm khoa Tốn, thầy chun ngành Đại số Lý thuyết số, Khoa Toán học thuộc Trường Đại học Vinh, thầy nhiệt tình giảng dạy giúp đỡ tác giả suốt thời gian học tập Tác giả xin chân thành cảm ơn Trường Đại học Sài Gòn tạo điều kiện thuận lợi cho tác giả suốt trình học tập Tác giả xin cảm ơn đồng nghiệp, gia đình bạn bè cộng tác, giúp đỡ khích lệ tơi suốt q trình học tập nghiên cứu Mặc dù có nhiều cố gắng, Luận văn khơng tránh khỏi hạn chế, thiếu sót Tác giả mong nhận ý kiến đóng góp thầy, giáo bạn đồng nghiệp Nghệ An, tháng 12 năm 2011 Tác giả CHƢƠNG VỀ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN 1.1 Khái niệm thuật tốn 1.1.1 Giới thiệu Có thể định nghĩa thuật toán theo nhiều cách khác Trong chương này, chúng tơi khơng có ý định trình bày thuật tốn giáo trình lơgic, mà hiểu khái niệm thuật tốn theo cách thơng thường Thuật tốn Dữ kiện vào Q trình tính tốn Một dãy bước tính tốn Một dãy số Thuật toán xếp Kết Dãy số xếp Một số từ khóa If (điều kiện) then {…} else for (điều kiện) {…} while (điều kiện) {…} procedure (T,a,b) {…} function (A) {…return r;} 1.1.2 Định nghĩa Thuật toán quy tắc để với liệu ban đầu cho, tìm lời giải sau khoảng thời gian hữu hạn Để minh họa cách ghi thuật tốn, tìm hiểu yêu cầu đề cho thuật toán, ta xét ví dụ cụ thể sau đây: Cho n số X[1], X[2],…, X[n], ta cần tìm m j cho m X [ j ] max X [k ] 1kn j lớn Điều có nghĩa cần tìm cực đại số cho, số lớn số đạt cực đại Với mục tiêu tìm số cực đại với số lớn nhất, ta xuất phát từ giá trị X[n] Bước thứ nhất, có số, ta tạm thời xem m = X[n] j = n Tiếp theo, ta so sánh X[n] với X[n - 1] Trong trường hợp n - = 0, tức n = 1, thuật toán kết thúc Nếu X[n - 1] ≤ X[n], ta chuyển sang so sánh X[n] với X[n - 2] Trong trường hợp ngược lại, X[n - 1] số cực đại hai số xét ta phải thay đổi m j: đặt m = X[n - 1], j = n -1 Với cách làm trên, bước, ta nhận số cực đại số xét Bước tiếp theo, so sánh với số đứng trước, kết thúc thuật tốn trường hợp khơng cịn số đứng trước Thuật tốn mơ tả ghi lại sau: 1.1.3 Thuật tốn tìm cực đại M1 [Bước xuất phát] Đặt j ← n, k ← n – 1, m ← X[n] M2 [Đã kiểm tra xong?] Nếu k = 0, thuật toán kết thúc M3 [So sánh] Nếu X[k] ≤ m, chuyển sang M5 M4 [Thay đổi m] Đặt j ← k, m ← X[k] (Tạm thời m cực đại) M5 [Giảm k] Đặt k ← k - 1, quay M2 Dấu “←” dùng để phép toán quan trọng phép thay chỗ (replacement) Trên đây, ta ghi thuật tốn ngơn ngữ thơng thường Trong trường hợp thuật tốn viết ngơn ngữ máy tính, ta có chương trình 1.1.4 Bài tốn Tháp Hà Nội Có n đĩa kích thước nhỏ dần xếp chồng lên cọc A, đĩa lớn dưới, đĩa nhỏ a) Hãy tìm cách chuyển chồng đĩa sang cột C cho : Mỗi lần chuyển đĩa từ cọc sang cọc khác lấy cọc B làm cọc trung gian Không xếp đĩa lớn đĩa nhỏ b) Ký hiệu L(n) số lần chuyển đĩa tốn n đĩa Bằng quy nạp, chứng minh có cách xếp cho L(n) = 2n - Lời giải a) Trường hợp n = 1: Chuyển đĩa từ cọc A C Như L(1) = = 21 – toán giải với n = b) Trường hợp n = 2: Lần lượt chuyển sau - Chuyển đĩa nhỏ từ A B; - Chuyển đĩa to từ A C; - Chuyển đĩa nhỏ từ B C Như vậy, L(2) = = 22 – Bài toán giải với n = Giả sử toán n – đĩa giải quyết, tốn n đĩa thực qua bước sau: Chuyển n – đĩa từ A B (theo giả thiết quy nạp toán thực được) Chuyển đĩa to lại từ A C (Bài toán đĩa) Chuyển n – đĩa từ B C (theo giả thiết quy nạp toán thực được) Do đó, tốn n + đĩa giải số lần chuyển toán gồm n + đĩa là: L(n + 1) = + L(n) + L(n) = + 2L(n) = + 2(2n - 1) = 2n + - Như vậy, giây chuyển đĩa từ cột tới cột kia, thời gian chuyển 64 đĩa 264 - giây (khoảng 58 tỉ năm) 1.1.5 Thuật toán giải đệ quy toán Tháp Hà Nội - Đặt tên cọc A, B, C tên chuyển bước khác (ở đây: A = Cọc Nguồn, C = Cọc Đích, B = Cọc Trung Gian) - Gọi n tổng số đĩa - Đánh số đĩa từ (nhỏ nhất, cùng) đến n (lớn nhất, cùng) Để chuyển n đĩa từ cọc A sang cọc B cần: chuyển n - đĩa từ A sang B Chỉ lại đĩa n cọc A chuyển đĩa n từ A sang C chuyển n - đĩa từ B sang C cho chúng nằm đĩa n Phương pháp gọi thuật giải đệ quy: để tiến hành bước 3, áp dụng lại thuật giải cho n - Toàn trình số hữu hạn bước, đến lúc thuật giải áp dụng cho n = Bước đơn giản chuyển đĩa từ cọc A sang cọc C 1.1.6 Ngơn ngữ Pascal biểu diễn thuật tốn giải toán tháp Hà Nội VAR n: Integer; Procedure chuyen (sodia: Integer; CotNguon: Char; CotDich: Char; CotTG: Char); Begin If sodia > then begin chuyen (sodia-1, CotNguon, CotTG, CotDich); writeln (CotNguon, '->', CotDich); { Dia lon nhat hien tai } 10 chuyen (sodia-1, CotTG, CotDich, CotNguon) end; End; BEGIN write('Hay nhap so dia: '); Readln(n); chuyen(n,'A','C','B'); {chuyen tu cot A sang cot C voi cot B lam trung gian} readln; END 1.1.7 Ngôn ngữ C viết Dev C++ thuật toán giải toán Tháp Hà Nội #include #include #include using namespace std; void chuyen(int sodia, char CotNguon, char CotDich, char CotTG) { if (sodia>0) { chuyen(sodia- 1, CotNguon, CotTG, CotDich); cout C3 > C5 > … 2i) C0 < C2 < C4 < … 3i) C2j+1 > C2k, với j, k 4i) limCk = x Chứng minh 1i), 2i), 3i) quy nạp 4i) pk 1 qk 1 Vì q0 1, q1 a1 qk 1 ak 1 qk qk 1 qn k Ta có pk 1 Vậy, với nhỏ tùy ý cho trước, cho j n qk qk 1 qk k k 1 đủ lớn ta có pj qj pk qk pi j q ik i 1 pi qi j i i 1 ik 1 k j Từ đây, ta có lim Ck x ■ Có thể thấy rằng, tên gọi “phân số hội tụ riêng” giải thích định lý 2.6.5 Định lý Giả sử n số tự nhiên khơng phương pk qk phân số hội tụ riêng n Ta đặt α0 = n , số αk, Qk , Pk định nghĩa theo công thức sau: k Pk n , Qk ak = [αk] , Pk+1 = akQk - Pk , Qk+1 = (n - Pn21 )/Qk 48 Khi đó, ta có: pk2 nqk2 1 Qk 1 k 1 Chứng minh Áp dụng định lý vừa chứng minh, ta có n a0 ; a1 , a , , k 1 Từ đó, k 1 a k 1 p k p k 1 a k 1q k q k 1 Pk 1 n , ta Qk 1 n P P k 1 n q n pk Qk 1 pk 1 k 1 k Qk 1qk 1 Vậy nqk ( Pk 1qk Qk 1qk 1 ) n ( Pk 1 pk Qk 1 pk 1 ) pk n Từ đó, suy nqk = Pk+1pk + Qk+1pk-1 , pk = Pk+1qk + Qk+1qk-1 Nhân đẳng thức thứ với qk, đẳng thức thứ hai với pk trừ đẳng thức thứ hai cho đẳng thức thứ nhất, ta thu kết cần chứng minh ■ Sau đây, ta áp dụng phân số liên tục để tìm thuật tốn phân tích số ngun thừa số ngun tố Nói xác hơn, ta xây dựng thuật toán để với số tự nhiên n cho trước, tìm ước số khơng tầm thường (khác n) 2.6.2 Thuật tốn phân tích số nguyên phân số liên tục Ta xuất phát từ nhận xét sau đây: Nếu ta tìm số x, y cho x y ≠ x2 - y2 = n ta tìm ước số khơng tầm thường n, n = x2 y2 = (x - y)(x + y) Bây giờ, giả sử ta có kết yếu hơn, chẳng hạn tìm x, y cho x2 ≡ y2(modn) < x < y < n, x + y ≠ n Khi đó, n ước tích (x y) (x + y) rõ ràng n không ước x + y x - y Như 49 ước số chung d1 = (n, x - y) d2 = (n, x + y) ước số không tầm thường n Các ước số tìm cách nhanh chóng nhờ thuật toán Euclid Định lý 2.6.5 cho ta phương pháp để tìm số x, y cần thiết Theo định lý 2.6.5, ta có: pk2 (1)k 1Qk 1 (mod n) Như vậy, vấn đề phải tìm Qk với số chẵn, số phương Mỗi lần tìm số Qk vậy, ta tìm ước n (cũng xảy trường hợp ước tầm thường: pk, Qk không thiết bé n nên điều kiện n ước x + y x - y khơng thỏa mãn Ví dụ 1) Phân tích số 1037 thừa số cách sử dụng phân số liên tục Ta có 1037 32,2 , Q1 1, Q2 49, p1 129 Như vậy, 1292 ≡ 49(mod1037) Do đó, 1292 - 72 = (129 + 7)(129 - 7) = 0(mod1037) Tính ước chung lớn nhất, ta được: (129 - 7, 1037) = 61, (129 + 7, 1037) = 17 Ta có hai ước 1037 trường hợp có khai triển 1037 = 61.17 2) Phân tích 1000009 Ta tính Q1 = 9, Q2 = 445, Q3 = 873, Q4 =81 Như vậy, p32 (mod 1000009) Ta khơng thu ước khơng tầm thường Tính tốn tiếp tục, ta có: Q18 = 16 số phương, p17 = 494881 Bằng thuật tốn mơ tả, ta tìm ước số 293, 3413 50 KẾT LUẬN Luận văn có nội dung sau: 1- Trình bày số kiến thức sở số học thuật toán qua định nghĩa kết lý thuyết thuật toán 2- Giới thiệu độ phức tạp thuật toán: Độ phức tạp số, O(1); Độ phức tạp tuyến tính, O(n); Độ phức tạp đa thức, O(P(n)); Độ phức tạp lôgarit, O(logn); Độ phức tạp hàm mũ, O(2n) 3- Minh hoạ độ phức thuật toán Bài toán Tháp Hà Nội 4- Giới thiệu số thuật toán số học: phân tích nguyên tố, nhân nhanh hai số, Euclid, J.Stein, Euclid mở rộng, biểu diễn phân số liên tục Luận văn tiếp tục tìm hiểu độ phức tạp thuật toán đa thức, tương tự với toán số nguyên 51 TÀI LIỆU THAM KHẢO [1] [2] [3] [4] [5] [6] [7] TIẾNG VIỆT Phạm Huy Điển (2002), Tính tốn, Lập trình Giảng dạy Tốn học Maple, NXB Khoa học Kỹ thuật, Hà Nội Lê Tuấn Hoa (2003), Đại số máy tính, NXB Đại học Quốc gia, Hà Nội Doãn Tam Hoè (2009), Hướng dẫn sơ lược phần mềm Mathematica, Trường Đại học Xây dựng, Hà Nội Hà Huy Khoái (2004), Số học, NXB Giáo dục, Hà Nội Hà Huy Khoái, Phạm Huy Điển (2003), Số học thuật toán, NXB Đại học Quốc gia Hà Nội Nguyễn Thành Quang (2003), Số học đại, Trường Đại học Vinh Nguyễn Thành Quang (2011), Lý thuyết trường ứng dụng, NXB Đại học Quốc gia Hà Nội TIẾNG ANH [8] Abelson, Sussman (1993), Structure and interpretation of computer programs MIT Press, 2nd Edition [9] D.M.Burton (2002), Elementary Number Theory, Tata McGraw-Hill Company, New Delhi [10] S.G.Telang (2001), Number Theory, Tata McGraw-Hill Company, New Delhi ... toán cần dùng cho chứng minh chương sau Chƣơng Độ phức tạp thuật toán số học Trong chương chúng tơi trình bày kết sở độ phức tạp thuật toán, số thuật toán số học độ phức tạp số thuật tốn số học. .. lý thuyết thuật toán 2- Giới thiệu độ phức tạp thuật toán: Độ phức tạp số, O(1); Độ phức tạp tuyến tính, O(n); Độ phức tạp đa thức, O(P(n)); Độ phức tạp lôgarit, O(logn); Độ phức tạp hàm mũ, O(2n)... 1: Các kiến thức sở độ phức tạp thuật toán 1.1 Khái niệm thuật toán? ??…………………………… 1.2 Các dạng diễn đạt thuật toán? ??…………………… 11 1.3 Độ phức tạp thuật toán? ??…………………………… 13 1.4 Đánh giá độ phức tạp