Tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng ( Luận văn thạc sĩ)Tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng ( Luận văn thạc sĩ)Tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng ( Luận văn thạc sĩ)Tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng ( Luận văn thạc sĩ)Tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng ( Luận văn thạc sĩ)
1 ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN&TRUYỀN THÔNG Đỗ Tuấn Anh TỔ CHỨC DỮ LIỆU CHO LỚP THUẬT TOÁN CHIA ĐỂ TRỊ VÀ ỨNG DỤNG Chun ngành: Khoa học máy tính Mã số: 60.48.01 TĨM TẮT LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2014 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu thân, xuất phát từ yêu cầu phát sinh công việc để hình thành hướng nghiên cứu Các số liệu có nguồn gốc rõ ràng tuân thủ nguyên tắc kết trình bày luận văn thu thập trình nghiên cứu trung thực chưa công bố trước Thái Nguyên, ngày 19 tháng năm 2014 Học viên thực hiên Đỗ Tuấn Anh Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ LỜI CẢM ƠN Đầu tiên, em xin gửi lời cảm ơn sâu sắc đến cán hướng dẫn khoa học, thầy giáo, PGS.TSKH Nguyễn Xuân Huy, người truyền cho em nguồn cảm hứng nghiên cứu khoa học, người định hướng cho em đến với lĩnh vực nghiên cứu Em xin bày tỏ lời cảm ơn tới thầy giáo, cô giáo giảng dạy em suốt hai năm học qua Em muốn gửi lời cảm ơn tới thành viên lớp có góp ý chun mơn động viên tinh thần đáng trân trọng Cuối cùng, em xin gửi lời cảm ơn sâu sắc tới tất người thân gia đình bạn bè em với động viên dành cho em công việc sống Học viên thực luận văn Đỗ Tuấn Anh Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ MỤC LỤC Trang Lời cam đoan Lời cảm ơn Mục lục iii Danh mục bảng v Danh mục hình vẽ .v MỞ ĐẦU CHƢƠNG CÁC CHIẾN LƢỢC THIẾT KẾ THUẬT TOÁN 1.1 Các bước giải tốn máy tính 1.2 Phân tích thời gian thực thuật toán 1.2.1 Độ phức tạp thuật toán .6 1.2.2 Xác định độ phức tạp thuật toán 1.2.3 Ký hiệu Big-O biểu diễn thời gian chạy thuật toán 10 1.2.4 Độ phức tạp thuật tốn với tình trạng liệu vào 13 1.2.5 Chi phí thực thuật toán 13 CHƢƠNG TỔ CHỨC DỮ LIỆU CHO LỚP THUẬT TOÁN CHIA ĐỂ TRỊ 14 2.1 Chiến lược chia để trị .14 2.2 Tổ chức liệu cho lớp thuật toán chia để trị 15 2.3 Định lý tổng qt tính độ phức tạp thuật tốn chia để trị 16 2.4 Một số lớp tốn điển hình 17 2.4.1 Lớp toán tìm kiếm 18 2.4.1.1 Thuật tốn tìm kiếm nhị phân .18 2.4.1.2 Bài tốn tìm Max .20 2.4.2 Lớp toán xếp .22 2.4.2.1 Thuật toán xếp trộn (Merge Sort) 22 2.4.2.2 Thuật toán xếp nhanh (Quick Sort) .24 2.4.3 Lớp toán tối ưu 27 2.4.3.1 Bài toán dãy dài 27 2.3.3.2 Bài toán tháp Hà Nội 29 2.3.3.5 Bài toán xếp lịch thi đấu 30 CHƢƠNG ỨNG DỤNG THUẬT TOÁN CHIA ĐỂ TRỊ GIẢI BÀI TOÁN NHÂN HAI SỐ NGUYÊN LỚN 32 3.1 Mơ tả tốn 32 3.2 Thuật toán nhân tự nhiên 32 3.3 Thuật toán nhân .33 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 3.4 Thuật toán nhân Karatsuba-Ofman 35 3.5 Thuật toán nhân dựa biến đổi Fourier nhanh .37 3.6 Thuật toán nhân chia để trị 40 3.6.1 Ý tưởng chung 40 3.6.2 Phân tích thuật tốn 41 3.6.3 Mơ hình thuật tốn chia để trị cho toán nhân hai số nguyên lớn .44 3.6.4 So sánh độ phức tạp thuật toán 46 3.7 Tổ chức liệu cho thuật toán chia để trị 46 3.7.1 Biểu diễn dạng bit 46 3.7.2 Biểu diễn dùng mảng xâu 47 3.8 Thực nghiệm đánh giá 51 3.8.1 Cài đặt C 51 3.8.2 Cài đặt C# 59 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 64 TÀI LIỆU THAM KHẢO 65 Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ DANH MỤC CÁC BẢNG Bảng 1.1 Các lớp độ phức tạp tính tốn 11 Bảng 1.2 Thời gian chạy lớp thuật toán 12 Bảng 2.1 Độ phức tạp thuật tốn tìm kiếm nhị phân 20 Bảng 2.2 Độ phức tạp thuật toán xếp nhanh 26 Bảng 3.1 So sánh độ phức tạp tính tốn thuật tốn nhân 46 DANH MỤC CÁC HÌNH Hình 2.1 Thuật toán chia để trị 14 Hình 2.2 Tổ chức liệu cho lớp toán chia để trị 15 Hình 2.3 Ví dụ thuật tốn xếp trộn 23 Hình 3.1 Thuật toán nhân Brute-force 33 Hình 3.2 Thuật tốn nhân chuẩn 34 Hình 3.3 Thuật tốn nhân SRMA 35 Hình 3.4 Thuật tốn nhân Karatsuba-Ofman 37 Hình 3.5 Thuật toán nhân FFT 39 Hình 3.6 Thuật tốn nhân chia để trị 45 Hình 3.7 Phép nhân chia để trị tổ chức dạng bit 46 Hình 3.8 Thuật toán nhân chia để trị biểu diễn bit 47 Hình 3.9 Ví dụ phép chia Ấn Độ Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ MỞ ĐẦU Ngày phương pháp áp dụng nhiều lĩnh vực đời sống Đặc biệt, phương pháp hiệu thiết kế thuật toán giải toán lớn, phức tạp Với toán đầu vào lớn ta chia thành phần nhỏ tìm lời giải cho toán nhỏ riêng biệt này, sau tổng hợp nghiệm riêng rẽ thành nghiệm tốn tồn cục Trong luận văn này, tơi tập trung phân tích việc tổ chức liệu cho lớp thuật toán chia để trị cách đánh giá độ phức tạp thuật toán chia để trị.Với mục tiêu áp dụng thiết kế thuật toán chia để trị để giải toán nhân hai số nguyên lớn, luận văn trình bày chương với bố cục sau: Chƣơng 1: Các chiến lƣợc thiết kế thuật toán Giới thiệu tổng quan bước giải tốn máy tính phân tích đánh giá thời gian thực thuật toán chiến lược thiết kế thuật toán Chƣơng 2: Tổ chức liệu cho lớp thuật tốn chia để trị.Trình bày ý tưởng, sở khoa học thuật toán chia để trị cách thức tổ chức liệu cho thuật toán chia để trị với toán kinh điển Chƣơng 3: Ứng dụng thuật toán chia để trị giải toán nhân hai số nguyên lớn Tập trung phân tích cách tiếp cận giải toán nhân hai số nguyên lớn Từ đề xuất thuật tốn dựa tư tưởng chia để trị để giải thực nghiệm so sánh với cách tiếp cận trước Cuối kết luận hƣớng phát triển:Tóm tắtnhững kết đạt được, hạn chế nêu lên hướng phát triển tương lai Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ CHƢƠNG CÁC CHIẾN LƢỢC THIẾT KẾ THUẬT TOÁN 1.1 Các bƣớc giải tốn máy tính Một thuật tốn thủ tục tính tốn định nghĩa xác, mà lấy giá trị tập giá trị, gọi đầu vào hay liệu vào tạo giá trị, tập giá trị, gọi đầu Miêu tả vấn đề thường xác định nói chungqua quan hệ đầu vào/đầu Một thuật toán dãy bước xác định để chuyển đổi liệu đầu vào thành liệu đầu Chúng ta xem thuật tốn cơng cụ để giải vấn đề tính tốn Việc trình bày rõ ràng vấn đề nói chung hình thành mối quan hệ mong muốn đầu vào/đầu Một thuật tốn mơ tả xác thủ tục tính tốn để đạt mối liên hệ liệu đầu vào liệu đầu 1.1.1 Xác định toán Việc xác định toán tức phải xác định xem ta phải giải vấn đề gì? với giả thiết cho lời giải cần phải đạt yêu cầu Khác với toán tuý toán học cần xác định rõ giả thiết kết luận không cần xác định yêu cầu lời giải, toán tin học ứng dụng thực tế cần tìm lời giải tốt tới mức đó, chí tồi mức chấp nhận Bởi lời giải tốt đòi hỏi nhiều thời gian chi phí Input → Process → Output (Dữ liệu vào →Xử lý →Kết ra) Ví dụ: Khi cài đặt hàm số phức tạp máy tính Nếu tính cách khai triển chuỗi vơ hạn độ xác cao thời gian chậm hàng tỉ lần so với phương pháp xấp xỉ Trên thực tế việc tính tốn ln ln cho phép chấp nhận sai số nên hàm số máy tính tính phương pháp xấp xỉ giải tích số Xác định u cầu tốn quan trọng ảnh hưởng tới cách thức giải chất lượng lời giải Một tốn thực tế thường cho thơng tin mơ hồ hình thức, ta phải phát biểu lại cách xác chặt chẽ để hiểu toán Trên thực tế, ta nên xét vài trường hợp cụ thể để thơng qua hiểu toán rõ thấy thao tác cần phải tiến hành Đối với toán đơn giản, đơi cần qua ví dụ ta đưa tốn quen thuộc để giải 1.1.2 Tìm cấu trúc liệu biểu diễn tốn Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ Khi giải toán, ta cần phải định nghĩa tập hợp liệu để biểu diễn tình trạng cụ thể Việc lựa chọn tuỳ thuộc vào vấn đề cần giải thao tác tiến hành liệu vào Có thuật tốn thích ứng với cách tổ chức liệu định, cách tổ chức liệu khác hiệu khơng thể thực Chính nên bước xây dựng cấu trúc liệu khơng thể tách rời bước tìm kiếm thuật toán giải vấn đề Các tiêu chuẩn lựa chọn cấu trúc liệu: - Phải biểu diễn đầy đủ thông tin nhập xuất toán - Phù hợp với thao tác thuật toán mà ta lựa chọn để giải toán - Phải cài đặt máy tính với ngơn ngữlập trình sửdụng Đối với sốbài tốn, trước tổchức dữliệu ta phải viết đoạn chương trình nhỏ để khảosátxem dữliệu cần lưu trữlớn tới mức độnào 1.1.3 Xây dựng thuật toán Thuật toán hệ thống chặt chẽ rõ ràng quy tắc nhằm xác định dãy thao tác cấu trúc liệu cho: Với liệu vào, sau số hữu hạn bước thực thao tác ra, ta đạt mục tiêu định.Các đặc trưng thuật tốn: Tính đơn định: Ở bước thuật toán, thao tác phải rõ ràng, không gây nên nhập nhằng, lộn xộn, tuỳ tiện, đa nghĩa Thực bước thuật tốn với liệu vào, cho kết Tính dừng: Thuật tốn khơng rơi vào q trình vơ hạn, phải dừng lại cho kết sau số hữu hạn bước Tính đúng: Sau thực tất bước thuật toán theo trình định, ta phải kết mong muốn với liệu đầu vào Kết kiểm chứng u cầu tốn Tính phổ dụng: Thuật tốn phải dễ sửa đổi để thích ứng với toán lớp tốn làm việc liệu khác Tính khả thi:Đối với tốn, có nhiều thuật tốn chúng phải cho output input Tuy nhiên chúng khác hiệu Hiệu thời gian tốc độ xử lý nhanh hay chậm Ta đánh giá vào số bước thực Hiệu không gian không gian lưu trữ theo số đối tượng dùng để ghi nhớ kết (kể kết trung gian) Trong Tin học có ngành chuyên đánh giá độ phức tạp giải thuật, chủ yếu đánh giá hiệu thời gian Thực tế sử dụng cho thấy thách thức không gian lưu trữ giải dễ thách thức thời gian thực Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 10 1.1.4 Lập trình Sau có thuật tốn, ta phải tiến hành lập trình thể thuật tốn Muốn lập trình đạt hiệu cao, cần phải có kỹ thuật lập trình tốt Kỹ thuật lập trình tốt thể kỹ viết chương trình, khả gỡ rối thao tác nhanh Lập trình tốt khơng phải cần nắm vững ngơn ngữ lập trình đủ mà phải biết cách viết chương trình uyển chuyển, phát triển bước để chuyển ý tưởng thành chương trình hồn chỉnh Kinh nghiệm cho thấy thuật toán hay cài đặt vụng nên chạy lại cho kết sai tốc độ chậm Thông thường, không nên cụ thể hố tồn chương trình mà nên tiến hành theo phương pháp tinh chế bước (Stepwiserefinement): - Ban đầu, chương trình thể ngơn ngữ tự nhiên, thể thuật toán với bước tổng thể, bước nêu lên công việc phải thực - Một công việc đơn giản đoạn chương trình học thuộc ta tiến hành viết mã lệnh ngôn ngữ lập trình - Một cơng việc phức tạp ta lại chia thành công việc nhỏ để lại tiếp tục với cơng việc nhỏ Trong trình tinh chế bước, ta phải đưa biểu diễn liệu Như với tinh chế công việc, liệu tinh chế dần, có cấu trúc hơn, thể rõ mối liên hệ liệu.Phương pháp tinh chếtừng bước thểhiện tưduy giải vấn đềtừtrên xuống, giúpcho người lập trình có định hướng thểhiện phong cách viết chương trình Tránhviệc mò mẫm, xố viết lại nhiều lần, biến chương trình thành tờgiấy nháp 1.1.5 Chạy kiểm thử 1.1.5.1 Chạy thử tìm lỗi Chương trình người viết ra, mà người nhầm lẫn Một chương trình viết xong chưa chạy máy tính kết mong muốn Kỹ tìm lỗi, sửa lỗi, điều chỉnh lại chương trình kỹ quan trọng người lập trình Kỹ có kinh nghiệm tìm sửa chữa lỗi mình.Có ba loại lỗi: - Lỗi cú pháp: Lỗi hay gặp lại dễ sửa nhất, cần nắm vững ngơn ngữ lập trình đủ Một người coi khơng biết lập trình sửa lỗi cú pháp - Lỗi cài đặt: Việc cài đặt thể khơng thuật tốn định, lỗi phải xem lại tổng thể chương trình, kết hợp với chức gỡ rối để sửa lại cho Số hóa Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ ... trị. Trình bày ý tưởng, sở khoa học thuật toán chia để trị cách thức tổ chức liệu cho thuật toán chia để trị với toán kinh điển Chƣơng 3: Ứng dụng thuật toán chia để trị giải toán nhân hai số nguyên lớn... T(n)=O(f(n)+g(n)) coi đoạn chương trình có độ phức tạp tính tốn O(max( f(n), g(n))) Chứng minh: T(n)=O(f(n)+g(n)) nên tồn n0>0 c>0 để T(n) ≤cf(n) + cg(n), với n ≥ n0 T(n) ≤cf(n) +cg(n) ≤ 2cmax (f(n),g(n))... 2.1 Chiến lược chia để trị .14 2.2 Tổ chức liệu cho lớp thuật toán chia để trị 15 2.3 Định lý tổng qt tính độ phức tạp thuật tốn chia để trị 16 2.4 Một số lớp tốn điển hình