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
1,25 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN - - PHẠM LÊ HOA GIẢI THUẬT THAM LAM KHÓA LUẬN TỐT NGHIỆP MỤC LỤC PHẦN MỞ ĐẦU 1 Lý chọn đề tài Mục đích nghiên cứu Nhiệm vụ nghiên cứu .2 Đối tượng nghiên cứu Phương pháp nghiên cứu .2 CHƯƠNG I CƠ SỞ LÝ THUYẾT 1.1 Thuật toán (Algorithm) 1.1.1 Định nghĩa thuật toán 1.1.2 Đặc trưng thuật toán 1.1.3 Thiết kế thuật toán 1.1.4 Phân tích thuật tốn 1.1.5 Biểu diễn thuật toán 1.2 Thời gian thực chương trình 1.3 Đơn vị đo thời gian thực 1.4 Độ phức tạp thuật toán 1.4.1 Khái niệm độ phức tạp thuật toán 1.4.2 Cách tính độ phức tạp 1.5 Giải thuật tham lam gì? .6 1.6 Bài toán tối ưu tổ hợp .6 1.7 Đặc trưng chiến lược tham lam 1.7.1 Nội dung kĩ thuật tham lam 1.7.2 Tính lựa chọn tham lam .7 1.7.3 Cấu trúc tối ưu 1.7.4.Đặc điểm chung thuật toán tham lam CHƯƠNG II: BÀI TOÁN ỨNG DỤNG 2.1 Cây mã Huffman .9 2.1.1 Mã huffman 2.1.2 Mã tiền tố 10 2.1.3 Phát biểu toán xây dựng mã hóa Huffman 11 2.1.4 Phân tích tốn xây dựng mã hóa Huffman 11 2.1.5 Thiết kế thuật tốn xây dựng mã hóa Huffman 12 2.2 Bài toán balo .16 2.2.1 Phát biểu toán balo 16 2.2.2 Phân tích tốn balo 16 2.2.3 Thiết kế toán balo 16 2.3 Bài toán khung nhỏ – thuật toán Kruskal .18 2.3.1.Phát biểu toán khung nhỏ 18 2.3.2 Phân tích tốn khung nhỏ 18 2.3.3 Thiết kế toán khung nhỏ 18 2.4 Bài toán khung nhỏ – thuật toán Prim 21 2.4.1 Phát biểu toán khung nhỏ nhất- thuật toán Prim .21 2.4.2 Phân tích tốn khung nhỏ .21 2.4.3 Thiết kế toán khung nhỏ 21 2.5 Bài toán trả tiền máy rút tiền tự động ATM 23 2.5.1 Phát biểu toán trả tiền máy rút tiền tự đông ATM .23 2.5.2 Phân tích tốn trả tiền máy rút tiền tự động ATM 24 2.5.3 Thiết kế toán trả tiền máy rút tiền tự động ATM 24 CHƯƠNG III: CÀI ĐẶT VÀ THỰC NGHIỆM .26 3.1 Bài toán Cây mã Huffman 26 3.1.1 Cài đặt chương trình 26 3.1.2 Đánh giá độ phức tạp .30 3.1.3 Chạy chương trình xây dựng mã hóa 30 3.2 Bài toán balo 30 3.2.1 Cài đặt .30 3.2.2 Đánh giá độ phức tap .35 3.2.3 Chạy chương trình 35 3.3 Bài toán khung nhỏ (thuật toán Kruskal) 35 3.3.1 Cài đặt chương trình 35 3.3.2 Đánh giá độ phức tạp .38 3.3.3 Chạy chương trình 38 3.4 Bài tốn tìm khung nhỏ (thuật toán Prim) 39 3.4.1 Cài đặt chương trình 39 3.4.2 Đánh giá độ phức tạp .42 3.4.3 Chạy chương trình 42 3.5 Bài toán trả tiền máy rút tiền tự động ATM 42 3.5.1 Cài đặt chương trình 42 3.5.2 Đánh giá độ phức tạp 44 3.5.3 Chạy chương trình 44 KẾT LUẬN 45 Kết đạt .45 Hạn chế .45 Hướng phát triển đề tài 45 TÀI LIỆU THAM KHẢO 46 PHẦN MỞ ĐẦU Lý chọn đề tài Khoa học kỹ thuật ngày phát triển, gắn liền với thực tiễn, để đáp ứng cho sống người khoa học cần phải đưa phương pháp tốt nhằm giải toán máy tính cách nhanh chóng hiệu tốn nhớ độ phức tạp nhỏ nhất, để từ vận dụng vào thực tiễn đưa kết mong muốn Lý thuyết tối ưu ngành tốn học phát triển mạnh, ngày có nhiều ứng dụng hoạt động lĩnh vực kinh tế, kỹ thuật, tổ chức Bên cạnh cịn ứng dụng lĩnh vực khoa học kỹ thuật y học chẩn đoán bệnh cách xác nhanh chóng mà dùng đến phương pháp vật lý nặng nề, tốn hay nhiều vấn đề khác nữa… Cuộc cách mạng thơng tin tạo điều kiện thuận lợi chưa có để ứng dụng tối ưu hóa cách rộng rãi thiết thực Những ngành khoa học phương pháp tối ưu có bước phát triển mạnh, đặc biệt từ máy vi tính phổ biến rộng rãi có tính ngày mạnh Nếu năm 60 toán phi tuyến khoảng mười biến gọi cỡ lớn, tốn khó ngày nhiều tốn đến hàng trăm, hàng nghìn biến xử lý nhanh chóng dễ dàng Những điều cho thấy nhạy cảm giới công nghệ giới thành tựu nhỏ phương pháp tối ưu vai trò ngày tăng phương pháp thời đại ngày Để giải tốn tối ưu có nhiều phương pháp, phương pháp giải tốn tối ưu hóa thường bao gồm dãy bước, bước có nhiều cách lựa chọn cho tìm kết thỏa mãn điều kiện cụ thể mà kết tốt Các phương pháp dùng để giải toán tối ưu nhánh cận, giải thuật tham lam, chia để trị, kỹ thuật quy hoạch động… Nhưng phần ta sử dụng giải thuật tham lam để giải toán tối ưu Mục đích nghiên cứu Nghiên cứu “GIẢI THUẬT THAM LAM” nhằm thấy tầm quan trọng sử dụng thuật toán tham lam vào toán để đưa đến kết tối ưu -1- Nhiệm vụ nghiên cứu Phân tích thiết kế “GIẢI THUẬT THAM LAM” Đưa tốn ứng dụng để thấy rõ tối ưu phương pháp Đối tượng nghiên cứu Nghiên cứu nội dung kỹ thuật tham lam “Phân tích thiết kế giải thuật” “lý thuyết đồ thị” Các toán ứng dụng giải thuật tham lam Phương pháp nghiên cứu Lý thuyết : Thu thập, phân tích, tổng hợp tài liệu cần thiết liên quan đến “Giải thuật tham lam “ để hoàn thành đề tài Thực nghiệm : Tìm hiểu ứng dụng thực tế, từ xây dựng chương trình cho đề tài -2- CHƯƠNG I CƠ SỞ LÝ THUYẾT 1.1 Thuật toán (Algorithm) 1.1.1 Định nghĩa thuật tốn Có nhiều định nghĩa cách phát biểu khác định nghĩa thuật toán Theo sách tiếng “Introduction to Algorithm” Thomas H.Cormen, Charles E Leisersion, Ronadl L.Livest, Clifford Stein thuật tốn định nghĩa sau “ thuật tốn thủ tục tính tốn xác định, nhận giá trị tập giá trị gọi Input, sinh vài giá trị tập giá trị gọi Output” Nói cách khác thuật tốn giống cách thức, quy trình để hồn thành cơng việc cụ thể xác định Vì hàm đơn giản để cộng hai số thuật tốn hồn chỉnh thuật tốn đơn giản 1.1.2 Đặc trưng thuật tốn + Tính đắn : Thuật toán cần phải đảm bảo cho kết sau thực liệu đầu vào Đây nói đặc trưng quan trọng thuật toán + Tính dừng : Thuật tốn cần phải đảm bảo tính dừng sau số hữu hạn bước + Tính xác định: Các bước thuật toán phải phát biểu rõ ràng cụ thể, tránh gây nhập nhằng người đọc, hiểu, cài đặt thuật toán + Hiệu quả: Thuật toán xem hiệu có khả giải tốn hiệu đặt thời gian điều kiện cho phép thực tế đáp ứng nhu cầu người dùng +Tính phổ qt: Thuật tốn gọi có tính phổ qt giải lớp tốn tương tự Ngồi thuật toán theo định nghĩa nhận giá trị đầu vào gọi chung giá trị Input kết toán tùy theo toán thuật tốn cho kết cụ thể gọi Output 1.1.3 Thiết kế thuật toán Để giải tốn máy tính điện tử, trước tiên ta phải có thuật tốn Một câu hỏi đặt làm để tìm thuật toán cho toán đặt Lớp toán đặt từ ngành khoa học kỹ thuật, từ lĩnh vực hoạt động -3- người phong phú đa dạng, thuật toán giải toán khác khác Tuy nhiên có số kỹ thuật thiết kế thuật toán chung chia để trị ( Divide- and- conque), thuật toán tham lam ( Greedy method), quy hoạch động ( Dynamic programming)…việc nắm thiết kế thuật toán quan trọng cần thiết giúp cho ta dễ tìm thuật tốn cho toán đưa 1.1.4 Phân tích thuật tốn Giả sử với số tốn có số thuật tốn giải, câu hỏi xuất cần chọn thuật tốn số thuật tốn để áp dụng Vì việc phân tích thuật tốn điều cần thiết để đánh giá thuật toán * Đánh giá hiệu thuật toán Khi giải vấn đề, cần chọn số thuật toán, thuật toán mà ta cho “tốt” Vậy ta cần lựa chọn thuật toán sở nào? Thông thường ta dựa hai tiêu chuẩn sau đây: + Thuật toán đơn giản, dễ hiểu, dễ cài đặt + Thuật toán sử dụng tiết kiệm nguồn tài nguyên máy tính đặc biệt chạy nhanh 1.1.5 Biểu diễn thuật tốn Có nhiều phương pháp biểu diễn thuật tốn Có thể biểu diễn danh sách bước, bước biểu diễn ngôn ngữ thông thường ký hiệu tốn học, biểu diễn sơ đồ khối Tuy nhiên để đảm bảo tính xác định thuật tốn thuật tốn viết ngơn ngữ lập trình Một chương trình biểu diễn thuật tốn ngơn ngữ lập trình chọn thơng thường ta sử dụng ngơn ngữ lập trình Pascal, ngơn ngữ sử dụng để trình bày sách báo Ngơn ngữ thuật tốn ngơn ngữ dùng để miêu tả thuật tốn, thơng thường ngơn ngữ thuật tốn gồm có ba loại: + Ngôn ngữ liệt kê bước + Sơ đồ khối + Ngơn ngữ lập trình -4- 1.2 Thời gian thực chương trình Thời gian thực chương trình hàm kích thước liệu vào, ký hiệu T(n) n kích thước liệu vào 1.3 Đơn vị đo thời gian thực Đơn vị đo thời gian thực đơn vị đo thời gian bình thường giờ, phút, giây… mà thường xác định số lệnh thực máy tính lý tưởng 1.4 Độ phức tạp thuật toán 1.4.1 Khái niệm độ phức tạp thuật toán Thước đo hiệu thuật toán thời gian mà máy tính sử dụng để giải tốn theo thuật tốn xét, giá trị đầu vào có kích thước xác định Các vấn đề liên quan đến độ phức tạp tính tốn thuật tốn Sự phân tích thời gian cần thiết để giải tốn có kích thước đặc biệt có liên quan đến độ phức tạp thời gian thuật toán Việc xem xét độ phức tạp thời gian thuật toán vấn đề thiết yếu thuật toán thực Độ phức tạp thời gian thuật tốn biểu diễn qua số phép toán dùng thuật tốn giá trị đầu vào có kích thước xác định Sở dĩ độ phức tạp thời gian mơ tả thơng qua phép tốn địi hỏi thay thời gian thực máy tính máy tính khác thực phép tính sơ cấp khoảng thời gian khác nhau, phân tích tất phép tốn thành phép tính bít sơ cấp mà máy tính sử dụng điều phức tạp Khi nói đến độ phức tạp thuật toán ta muốn nói đến hiệu thời gian thực chương trình nên ta xem việc xác định thời gian thực chương trình xác định độ phức tạp 1.4.2 Cách tính độ phức tạp * Quy tắc cộng Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1 P2 T1(n) =O(f(n)), T2(n)=O(g(n)) thời gian thực hai đoạn chương trình nối tiếp T(n)= O(max(f(n),g(n))) * Quy tắc nhân -5- Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1 P2 T1(n) =O(f(n)), T2(n)=O(g(n)) thời gian thực hai đoạn chương trình lồng T(n)= O(f(n),g(n)) * Quy tắc tổng quát để phân tích đoạn chương trình Thời gian thực lệnh gán READ, WRITE O(1) Thời gian thực chuỗi lệnh xác định quy tắc cộng Như thời gian thời gian thi hành lệnh lâu chuỗi lệnh Thời gian thực cấu trúc IF thời gian lớn thực lệnh sau THEN sau ELSE thời gian kiểm tra điều kiện Thường thời gian kiểm tra điều kiện O(1) Thời gian thực vòng lặp tổng thời gian thưc thân vòng lặp Nếu thời gian thực thân vịng lặp khơng đổi thời gian thực vịng lặp tích số lần lặp với thời gian thực thân vòng lặp 1.5 Giải thuật tham lam gì? Là thuật tốn dùng để giải tốn để tìm kiếm lựa chọn tối ưu địa phương bước với hy vọng tìm tối ưu tồn cục 1.6 Bài tốn tối ưu tổ hợp Là dạng tốn tối ưu, có dạng tổng quát sau: - Cho hàm f(X) xác định tập hữu hạn phần tử D Hàm f(X) gọi hàm mục tiêu - Mỗi phần tử X∈ D có dạng X=(x1, x2, xn) gọi phương án - Cần tìm phương án X∈ D cho hàm f(X) đạt min( max) Phương án X gọi phương án tối ưu 1.7 Đặc trưng chiến lược tham lam 1.7.1 Nội dung kĩ thuật tham lam Tham lam theo cách hiểu dân gian mâm có nhiều ăn, ngon ta ăn trước ăn cho hết chuyển sang ngon thứ hai, lại ăn hết ngon thứ hai chuyển sang ngon thứ ba… -6- end; procedure xacdinh; var sl,tlduoc,tltui:integer; gtduoc:real; begin i:=1; j:=1; tltui:=tui; gtduoc:= 0;tlduoc:= 0; while i