Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
111,75 KB
Nội dung
KHOA CÔNG NGHỆ THÔNG TIN Bài tập lớn PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN ĐỀ SỐ 26: Thuật toán tìm kiếm Cho mảng X có n số nguyên Hãy xây dựng thuật toán tìm số lớn thứ hai mảng X Đánh giá độ phức tạp trường hợp xấu Giảng viên hướng dẫn Học viên thực Mã Sinh viên Lớp Hà Nội, 05/2014 : PGS TS Đào Thanh Tĩnh : Dư Quang Trung : 13870829 : HTTT25B Mục lục Đặt vấn đề Bài toán tìm kiếm toán phổ biến có ý nghĩa quan trọng sở lý thuyết lẫn ứng dụng thực tiễn công nghệ thông tin truyền thông Quá trình phát triển công nghệ khiến ngày có nhiều người tiếp cận sử dụng thiết bị, giải pháp công nghệ thông tin Đi khối lượng liệu khổng lồ lưu trữ, sinh hàng ngày Việc quản lý sở liệu lớn với tác vụ như: xếp, truy xuất liệu trở nên phức tạp Nhiệm vụ nghiên cứu triển khai giải thuật tìm kiếm liệu cách hiệu đặt để tối ưu hóa hệ thống nhiều mặt: chi phí triển khai, trì, lượng tiêu thụ, độ tin cậy, an toàn… Đề tài nhỏ tập trung vào nghiên cứu trình bày vấn đề sau • • Cơ sở lý thuyết toán tìm kiếm giải thuật tìm kiếm Ứng dụng vào toán tìm kiếm phần tử lớn thứ nhì mảng số nguyên cho trước • Phân tích tình phức tạp trình giải toán Tổng quan lý thuyết toán tìm kiếm thuật toán tìm kiếm Thuật toán tìm kiếm nhận đầu vào (input) mô hình liệu yêu cầu đề bài, cho kết đầu (output) sau số bước tính toán hữu hạn, xác định Đầu vào đầu thuật toán tìm kiếm sau: • Đầu vào (input): sở liệu lưu trữ dạng cấu trúc liệu mảng, danh sách liên kết, cây, đồ thị… yêu cầu tìm kiếm, thường phần tử sở liệu thỏa mãn tính chất mong muốn • Đầu (output): phần tử có tính chất mong muốn theo yêu cầu tìm kiếm đầu vào Đầu thuật toán tìm kiếm phải đảm bảo: phần tử đầu phải phần tử thỏa mãn tính chất mong muốn theo yêu cầu tìm kiếm, đồng thời không bỏ sót phần tử thỏa mãn tính chất mong muốn theo yêu cầu tìm kiếm Do liệu đầu vào thuật toán tìm kiếm lưu trữ nhiều dạng cấu trúc khác nhau, thuật toán tìm kiếm phân loại dựa mô hình liệu đầu vào chúng Có ba mô hình liệu đầu vào cho thuật toán tìm kiếm: mảng (danh sách), đồ thị 2.1 Tìm kiếm mảng (danh sách) Thuật toán tìm kiếm mảng loại giải thuật tìm kiếm Thuật toán tìm kiếm tập hợp phần tử chứa khóa Thuật toán tìm kiếm mảng đơn giản tìm kiếm tuyến tính Thuật toán tìm kiếm tuyến tính kiểm tra phần tử danh sách theo thứ tự danh sách Thuật toán có độ phức tạp tính toánO(n), n số phần tử danh sách Thuật toán tìm kiếm tuyến tính danh sách có độ phức tạp tính toán lớnnhưng sử dụng trực tiếp cho danh sách mà không cần tiền xử lý Tìm kiếm nhị phân thuật toán cao cấp với độ phức tạp tính toánO(log n) Đối với danh sách lớn, thuật toán tốt hẳn tìm kiếm tuyến tính, đòi hỏi danh sách phải xếp từ trước đòi hỏi khả truy nhập ngẫu nhiên vào phần tử nằm mảng Một thuật toán tìm kiếm mảng hiệu khác thuật toán tìm kiếm nội suy Độ phức tạp thuật toán tìm kiếm nội suy với mảng n phần tử làO(n) Tuy nhiên, trường hợp phần tử mảng số ngẫu nhiên phân bố (trường hợp phổ biến nhất), độ phức tạp thuật toán đạt O(loglogN) Bảng băm (hash table) dùng cho tìm kiếm danh sách Thuật toán đòi hỏi thời gian số trường hợp trung bình, lại cần nhiều không gian nhớ độ phức tạp thuật toánO(n) cho trường hợp xấu Một phương pháp tìm kiếm khác dựa cấu trúc liệu chuyên biệt sử dụng tìm kiếm nhị phân cân độ phức tạp thuật toánO(log n); giải thuật loại coi mở rộng thuật toán tìm kiếm nhị phân phép chèn xóa nhanh Đa số giải thuật tìm kiếm mảng tìm kiếm tuyến tính, tìm kiếm nhị phân, tìm kiếm nhị phân cân mở rộng để tìm tất giá trị nhỏ lớn khóa cho trước 2.2 Tìm kiếm Cây cấu trúc liệu phổ biến thường dùng tin học, việc xây dựng mô hình liệu cấu trúc liệu Cây khái niệm quan trọng lý thuyết đồ thị, cấu trúc liệu giải thuật Cây đồ thị mà hai đỉnh nối với đường đi, hay nói cách khác đồ thị liên thông chu trình Cấu trúc sử dụng rộng rãi cấu trúc liệu ngành khoa học máy tính nhị phân, đống, trie, Huffman cho nén liệu, v.v Tìm kiếm thuật toán tìm kiếm phổ biến Các thuật toán tìm kiếm gồm nút, tường minh xây dựng dần trình tìm kiếm Nguyên lý là: nút lấy từ cấu trúc liệu, nút xem xét bổ sung vào cấu trúc liệu Bằng cách thao tác cấu trúc liệu này, tìm kiếm duyệt theo thứ tự khác nhau, chẳng hạn theo mức (tìm kiếm theo chiều rộng) tới nút trước quay lui (tìm kiếm theo chiều sâu) Các ví dụ khác tìm kiếm bao gồm: tìm kiếm lặp sâu dần, tìm kiếm chiều sâu giới hạn, tìm kiếm hai chiều tìm kiếm chi phí 2.3 Tìm kiếm đồ thị Thuật toán tìm kiếm đồ thị trường hợp mở rộng tổng quát thuật toán tìm kiếm Đồ thị tập đỉnh (hoặc nút) nối với cạnh Cạnh có hướng vô hướng Đồ thị thường vẽ dạng tập điểm (các đỉnh nối với đoạn thẳng (các cạnh).Đồ thị biểu diễn nhiều cấu trúc, nhiều toán thực tế biểu diễn đồ thị Cấu trúc đồ thị mở rộng cách gán trọng số cho cạnh Có thể sử dụng đồ thị có trọng số để biểu diễn nhiều khái niệm khác Loại đồ thị gọi đồ thị có hướng Một đồ thị có hướng với cạnh có trọng số gọi lưới Trong lý thuyết đồ thị toán tìm kiếm phổ biến kể đến toán tìm khung nhỏ nhất, toán tìm đường ngắn hai đỉnh Các thuật toán phổ biến sử dụng thuật toán Prim, thuật toán Kruskal tìm khung nhỏ nhất, thuật toán Dijktra tìm đường ngắn Bài toán: Cho mảng X có n số nguyên Hãy xây dựng thuật toán tìm số lớn thứ hai mảng X Đánh giá độ phức tạp trường hợp xấu Để triển khai thuật toán tìm số lớn thứ hai mảng, cần phải có liệu đầu vào Dữ liệu đầu vào liệu thực tế Trong tập lớn này, liệu đầu vào sinh tự động nhờ thuật toán mô liệu đầu vào máy tính 3.1 Thuật toán mô liệu đầu vào Dữ liệu đầu vào toán mảng có n số nguyên Mảng số có trường hợp sau: Mảng số có trật tự Mảng tăng/không giảm Mảng giảm/ không tăng • Mảng số ngẫu nhiên Số ngẫu nhiên có xác suất xuất tuân theo hàm phân bố • Các thuật toán để mô liệu đầu vào sau: a Mảng có trật tự Ý tưởng thuật toán: tạo số ngẫu nhiên làm phần tử dãy Sinh số cách cộng thêm vào số ngẫu nhiên ban đầu giá trị ngẫu nhiên Đầu vào: Số phần tử n dãy cần tạo Đầu ra: Dãy tăng/không giảm có n phần tử Trình bày thuật toán giả mã lệnh: void generateIncreasingArray() { int a[1000];// ví dụ mảng có 1000 phần tử; for (int i = 0;i gặp rủi ro máy tính bị crash, điện,etc khiến cho toàn công việc thực bị mất, phải tiến hành lại từ đầu… - Xây dựng thuật toán theo hướng “phân mảnh hoá” trình tìm kiếm - Lưu liệu đầu bước tìm kiếm trước để làm đầu vào bổ sung bước tìm kiếm sau Bảng Các hình phức tạp với thuật toán tìm kiếm mảng 12 Thử nghiệm phân tích kết 4.1 Quy trình thử nghiệm Sử dụng thuật toán mô liệu đầu vào trình bày phần 3.1, tạo dãy số ngẫu nhiên theo phân bố đều, phân bố Exponential, phân bố Gauss, phân bố Poisson có 1000, 10 000, 100 000, 200 000, 500 000, 000 000, 000 000, 000 000 phần tử Áp dụng thuật toán tìm kiếm để tìm kiếm phần tử lớn thứ hai Đo thời gian thực thuật toán đếm thời gian máy tính So sánh kết thời gian thực thuật toán với dãy có số lượng phần tử khác để kiểm chứng công thức đánh giá độ phức tạp thuật toán Áp dụng thuật toán xếp tìm kiếm theo số để tìm kiếm phần tử lớn thứ hai Đo thời gian thực thuật toán đếm thời gian máy tính So sánh kết thời gian thực thuật toán với dãy có số lượng phần tử khác để kiểm chứng công thức đánh giá độ phức tạp thuật toán Các trường hợp phức tạp thuật toán trường hợp số lượng phần tử mảng đầu vào lớn, lên đến hàng triệu phần tử 4.2 Kết phân tích kết a Thuật toán tìm kiếm Thời gian tìm kiếm phần tử lớn thứ hai mảng, sử dụng thuật toán tìm kiếm trình bày bảng Đơn vị: microsecond 1000 10000 100000 200000 500000 1M 2M 5M Uniform 17 35 299 606 1553 3035 6498 15052 Exponential 67 372 744 1712 3158 6371 15125 Gauss 16 83 762 1139 1642 3025 6103 14999 Poisson 53 53 643 1496 3021 6094 15044 Bảng Thời gian tìm kiếm sử dụng thuật toán tìm kiếm Từ đồ thị biểu diễn thời gian tìm kiếm phần tử lớn thứ hai mảng theo số lượng phần tử mảng, ta thấy, thời gian tìm kiếm phần tử lớn thứ hai mảng biến đổi 13 gần tuyến tính với số lượng phần tử mảng Điều phù hợp với công thức đánh giá độ phức tạp thuật toán tìm kiếm O(n) Đối với toán sử dụng thuật toán tìm kiếm tuần tự, độ ổn định thuật toán tốt Thuật toán bị giới hạn độ phức tạp xảy trường hợp số lượng mẫu liệu lớn dẫn đến tràn nhớ, chương trình máy tính không quản lý nhớ b Sắp xếp mảng tìm kiếm theo số Thời gian xếp mảng đầu vào thành mảng không giảm tìm kiếm phần tử lớn thứ hai mảng trình bày bảng bảng Thuật toán xếp nhanh: Đơn vị: microsecond 1000 10000 100000 200000 500000 1M 2M Uniform 123 1327 25684 76026 391319 1371710 5366560 Exponential 156 1532 46070 152765 834429 3260902 13019054 Gauss 140 2074 29826 91976 477538 1799388 6939577 Poisson 117 2682 176995 286348 1654354 4321954 12543546 Bảng Thời gian tìm kiếm sử dụng thuật toán xếp nhanh Từ đồ thị biểu diễn thời gian xếp mảng tìm kiếm phần tử lớn thứ hai mảng sử dụng thuật toán xếp nhanh, ta thấy: Thời gian tính toán thuật toán tương đồng với công thức Độ phức tạp tính toán trung bình thuật toán O(nlogn) • Thuật toán xếp nhanh mô hình liệu ngẫu nhiên có phân bố phân bố Gauss, chậm mô hình liệu ngẫu nhiên có phân bố Exponential phân bố Poisson, đặc biệt số lượng mẫu liệu trở nên lớn • Đơn vị: microsecond 1000 10000 100000 200000 500000 1M 2M Uniform 210 2316 56922 114320 291026 583014 1187470 Exponential 218 2364 59613 117333 293489 594197 1178007 Gauss 257 3387 56779 119087 290577 592123 1188633 14 Poisson 218 2212 54820 110361 282312 568818 1146574 Bảng Thời gian tìm kiếm sử dụng thuật toán xếp trộn Từ đồ thị biểu diễn thời gian xếp mảng tìm kiếm phần tử lớn thứ hai mảng sử dụng thuật toán xếp trộn, ta thấy: Thời gian tính toán thuật toán có dạng giống với công thức Độ phức tạp tính toán trung bình thuật toán O(nlogn) • Thuật toán xếp trộncó thời gian tính toán tương đồng mảng đầu vào ngẫu nhiên có phân bố khác Do đó, thuật toán xếp trộn có ưu điểm độ đồng thời gian tính toán với nhiều mô hình liệu khác • Thuật toán xếp trộn có thời gian tính toán chậm thuật toán xếp nhanh trường hợp số lượng mẫu nhỏ (ít 100000 mẫu) nhanh thuật toán xếp nhanh trường hợp số lượng mẫu lớn đến lớn (từ 100000 mẫu đến vài triệu mẫu) • Kết luận Bài tập lớn xây dựng trình bày thuật toán tìm kiếm để giải toán tìm phần tử lớn thứ hai mảng số nguyên n phần tử • Thuật toán tìm kiếm Độ phức tạp trường hợp xấu nhất: O(n) • Thuật toán tìm kiếm duyệt từ phía có điều kiện mảng xếp Độ phức tạp thuật toán phụ thuộc vào độ phức tạp thuật toán xếp Sử dụng thuật toán xếp nhanh, độ phức tạp trường hợp xấu O(n2), sử dụng thuật toán xếp trộn, độ phức tạp trường hợp xấu O(nlogn) Các kết luận rút từ tập lớn • Kiểm chứng công thức đánh giá độ phức tạp hai thuật toán nói thử nghiệm thực tế • Thuật toán tìm kiếm cho thời gian tìm kiếm phần tử lớn thứ hai nhanh so với thuật toán yêu cầu xếp • Nếu tiến hành thuật toán xếp vào khoảng thời gian “rảnh” trước có yêu cầu tìm kiếm, thời gian tìm kiếm mảng xếp nhanh nhiều so với tìm kiếm • Thuật toán xếp trộn chậm thuật toán xếp nhanh với mảng có phần tử (từ 100000 phần tử trở xuống), nhanh đáng kể thuật toán xếp 15 nhanh với mảng có từ nhiều đến nhiều phần tử (từ vài trăm nghìn đến vài triệu phần tử) • Các tình phức tạp xảy tính toán là: khối lượng liệu vào lớn, gây cố tràn nhớ, cấp phát nhớ Chương trình giải tình phức tạp cách áp dụng kỹ thuật cấp phát nhớ động, ghi liệu file đọc phần vào nhớ Nhóm tác giả thực tập lớn xin chân thành cảm ơn PGS.TS Đào Thanh Tĩnh tận tình giảng dạy hướng dẫn nhóm tác giả suốt trình nghiên cứu môn học Phân tích đánh giá thuật toán trình nghiên cứu, thực tập lớn 16 ... đầu vào chúng Có ba mô hình liệu đầu vào cho thuật toán tìm kiếm: mảng (danh sách), đồ thị 2.1 Tìm kiếm mảng (danh sách) Thuật toán tìm kiếm mảng loại giải thuật tìm kiếm Thuật toán tìm kiếm. .. thuyết toán tìm kiếm giải thuật tìm kiếm Ứng dụng vào toán tìm kiếm phần tử lớn thứ nhì mảng số nguyên cho trước • Phân tích tình phức tạp trình giải toán Tổng quan lý thuyết toán tìm kiếm thuật toán. .. dụng tìm kiếm nhị phân cân độ phức tạp thuật toánO(log n); giải thuật loại coi mở rộng thuật toán tìm kiếm nhị phân phép chèn xóa nhanh Đa số giải thuật tìm kiếm mảng tìm kiếm tuyến tính, tìm kiếm