Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
758,19 KB
Nội dung
lOMoARcPSD|11119511 TRƯỜNG ĐẠI HỌC XÂY DỰNG KHOA CÔNG NGHỆ THÔNG TIN ⁎⁎⁎⁎⁎ BÁO CÁO BÀI TẬP PHÂN TÍCH VÀ THIẾT KẾ THUẬT TỐN Đề tài: Tìm hiểu thuật tốn xếp Nhóm thực hiện: Nhóm 02 – 64CS1 Vũ Xuân Hoàn Triệu Việt Hùng Đào Thanh Hiệp Trần Văn Mạnh Lê Thị Thùy Trang - 2021 - lOMoARcPSD|11119511 Mục lục Phần I: Phần mở đầu 1.1 Nêu vấn đề: 1.2 Mục đích đề tài: 1.3 Phạm vi nghiên cứu đề tài: Phần II: Cơ sở lý thuyết 2.1 Các khái niệm 2.1.1 Bài toán (Problem) 2.1.2 Thuật toán (Algorithm) 2.1.3 Chương trình (Program) 2.2 Đánh giá độ phức tạp thuật toán & Chứng minh tính 2.2.1 Đánh giá độ phức tạp 2.2.2 Chứng minh tính Phần III: Các thuật toán xếp 3.1 Sắp xếp chèn (Insertion sort) 3.1.1 Ý tưởng thuật toán 3.1.2 Mô tả thuật toán .7 3.1.3 Ví dụ 3.1.4 Phân tích độ phức tạp .10 3.1.5 Chứng minh tính 10 3.1.6 Code java 10 3.2 Sắp xếp chọn (Selection sort) 12 3.2.1 Ý tưởng thuật toán 12 3.2.2 Mơ tả thuật tốn 12 3.2.3 Ví dụ 13 3.2.4 Phân tích độ phức tạp .15 3.2.5 Chứng minh tính 15 3.2.6 Code java & Thực nghiệm 16 3.3 Sắp xếp bọt (Bubble sort) 18 3.3.1 Ý tưởng thuật toán 18 3.3.2 Mơ tả thuật tốn 19 3.3.3 Ví dụ 19 lOMoARcPSD|11119511 3.3.4 Phân tích độ phức tạp .20 3.3.5 Chứng minh tính 21 3.3.6 Code java & Thực nghiệm 22 3.4 Sắp xếp đổi chỗ trực tiếp (Interchange sort) .23 3.4.1 Ý tưởng thuật toán .23 3.4.2 Mô tả thuật toán 23 3.4.3 Ví dụ 24 3.4.4 Phân tích độ phức tạp .26 3.4.5 Chứng minh tính 27 3.4.6 Code java & Thực nghiệm 28 lOMoARcPSD|11119511 Phần I: Phần mở đầu 1.1 Nêu vấn đề: Hiện hầu hết hệ lưu trữ, quản lí liệu, thao tác tìm kiếm thường thực nhiều để khai thác thơng tin cách nhanh chóng Để phục vụ cho việc tìm kiếm nhanh chóng liệu cần xếp theo trật tự định Để rõ làm rõ cho câu hỏi “Tại cần phải xếp?” thử tượng tượng: Bạn cần tra cứu từ từ điển, nhiên từ điển lại khơng xếp theo thứ tự alphabet, từ từ điển xếp theo quy luật ngẫu nhiên Khi đó, việc bạn phải làm lật trang trang bạn lại phải cố tìm kiếm xem từ cần tìm có trang hay khơng Việc khiến bạn phải bỏ nhiều thời gian công sức Tuy nhiên, với từ điển xếp theo thứ tự alphabet cơng việc tra cứu dễ dàng Lấy ví dụ khác, bạn cho danh sách điểm sinh viên toàn trường, u cầu đặt tìm sinh viên có điểm số cao nhất, việc bạn phải làm duyệt qua sinh viên tìm sinh viên có điểm số cao nhất, cơng việc dễ dàng hồn tồn thực được, câu chuyện khơng dừng lại Bởi công việc yêu cầu lọc top 10 sinh viên có điểm số cao để phục vụ công tác khen thưởng, với danh sách chưa xếp bạn phải tìm sinh viên có điểm số cao thứ nhất, thứ 2, thứ 3, việc làm cho bạn tốn nhiều thời gian công sức, đặc biệt số lượng sinh viên danh sách tăng thời gian công sức bạn bỏ tỉ lệ thuận theo số lượng Tuy nhiên với danh sách sinh viên với điểm số xếp (giả sử xếp theo thứ tự giảm dần), công việc bạn đơn giản lấy 10 sinh viên danh sách Qua ví dụ thấy rằng, xếp khiến cho thao tác tìm kiếm hay lọc trở nên dễ dàng nhiều Chính vậy, xếp toán quan trọng lập trình Trong lập trình có khơng 20 thuật tốn phục vụ cho cơng việc xếp 1.2 Mục đích đề tài: Trong đề tài tìm hiểu khảo sát thuật toán xếp Các thuật tốn xếp có điểm chung xây dựng sở liệu so sánh giá trị phần tử mảng Khi xây dựng thuật toán xếp cần ý giảm thiểu phép so sánh đổi chỗ không cần thiết để tăng hiệu thuật toán lOMoARcPSD|11119511 Qua hiểu rõ ưu nhược điểm phương pháp xếp để so sánh tốc độ xếp 1.3 Phạm vi nghiên cứu đề tài: Nội dung báo cáo thuật toán xếp bản: - Sắp xếp chèn (Insertion sort) Sắp xếp chọn (Selection sort) Sắp xếp bọt (Bubble sort) Sắp xếp đổi chỗ trực tiếp (Interchange sort) Phần II: Cơ sở lý thuyết 2.1 Các khái niệm 2.1.1 Bài toán (Problem) Bài toán việc mà người muốn máy tính thực nhằm cho kết Bài toán xác định yếu tố bản: - Đầu vào (Input): cung cấp thơng tin liệu có - Đầu (Output): thơng tin cần tìm/cần xác định 2.1.2 Thuật toán (Algorithm) Thuật toán dãy hữu hạn thao tác xếp theo trình tự định cho sau thực dãy thao tác từ Input tốn ta nhận Output cần tìm Một số đặc trưng thuật tốn: - Tính tổng quát - Tính dừng - Tính xác định - Tính hiệu Một số phương pháp mơ tả thuật toán: - Liệt kê bước - Sơ đồ khối - Giả mã (pseudo code) lOMoARcPSD|11119511 Những vấn đề cần quan tâm nghiên cứu thuật toán: - Giải thuật tốn - Tối ưu hóa thuật toán - Cách triển khai thuật toán 2.1.3 Chương trình (Program) Chương trình thể ngơn ngữ lập trình cụ thể thuật tốn cho xác định cấu trúc liệu xác định 2.2 Đánh giá độ phức tạp thuật tốn & Chứng minh tính 2.2.1 Đánh giá độ phức tạp Phương pháp thực nghiệm: Lập trình thử ví dụ Phương pháp lý thuyết: Tính tốn thời gian, nhớ, … cần thiết thuật toán dựa độ lớn input - Ưu điểm phương pháp lý thuyết: o Không phụ thuộc ngôn ngữ lập trình, loại máy tính o Biết tính hiệu thuật toán liệu có kích thước lớn Các quy tắc đánh giá độ phứ tạp thuật toán: - Quy tắc số Quy tắc cộng Quy tắc lấy max Quy tắc nhân 2.2.2 Chứng minh tính Các chiến lược chứng minh tính (correctness): - Kiểm thử: Chạy thử thuật tốn với liệu vào cụ thể o Ưu điểm: Dễ thực o Nhược điểm: Có thể khơng phát hết lỗi - Chứng minh tính đúng: Chứng minh toán học o Ưu điểm: Tổng quát lOMoARcPSD|11119511 o Nhược điểm: Khó có lỗi - Kết hợp kiểm thử chứng minh tính Đối với thuật tốn đệ quy, sử dụng phương pháp quy nạp: - Chứng minh tính thuật tốn theo kích thước liệu vào Cơ sở quy nạp: Trường hợp đơn giản Giả thiết quy nạp: Thuật tốn với liệu kích thước n Tổng quát: Thuật toán với liệu kích thước n + Đối với thuật tốn khơng đệ quy, sử dụng bất biến vòng lặp (loop invariant): - Xác định bất biến vòng lặp cho: bất biến vòng lặp lần lặp cuối kéo theo thuật toán - Chứng minh bất biến lần lặp - Chứng minh bất biến lần lặp trước lần lặp sau Phần III: Các thuật toán xếp 3.1 Sắp xếp chèn (Insertion sort) 3.1.1 Ý tưởng thuật tốn Thuật tồn thực cách duyệt qua phần tử mảng xếp vào vị trí mảng (mảng từ phần tử đầu tiền đến phần tử xét) cho dãy số xếp theo yêu cầu tồn 3.1.2 Mơ tả thuật tốn Giả sử: Cho mảng A có n phần tử chưa xếp, yêu cầu toàn xếp mảng A theo thứ tự tăng dần Bước 1: Khởi tạo mảng (mảng xếp) có k = phần tử phần tử mảng chưa xếp (có số i = 0) Bước 2: Nếu i A[j]) { Temp = A[j]; A[j] = A[i]; A[i] = Temp; } } } CPU-Time Complexity: T(n) T(n) = O(n) * (O(1) + O(n-1) * (O(1) + O(1) + O(1) +O(1))) = O(n) * (O(1) + O(n-1) * O(4*1)) = O(n) * (O(1) + O((n-1) * 4) = O(n) * O(4n – +1) = O(4n2 – 3n) = O(n2) O(n) O(1) O(n-1) O(1) O(1) O(1) O(1) lOMoARcPSD|11119511 CPU - Time: O(n^2) 120 100 80 60 40 20 0 10 3.4.5 Chứng minh tính Dãy có kích thước n - Vòng lặp i = 1, so sánh A[1] với A[j] ( j : từ (i+1) tới (n-1)) Nếu A[1] < A[j] => swap(A[1], A[j]); →Đúng với i = - Vòng lặp i = k, so sánh A[k] với A[j] Nếu A[k] < A[j] => swap(A[k], A[j]) - Vòng lặp i = k+1, so sánh A[k+1], A[j] 12 lOMoARcPSD|11119511 Nếu A[k+1] < A[j] => swap(A[k+1], A[j]) → Đúng với i = k+1 → Vậy giải thuật 3.4.6 Code java & Thực nghiệm Bảng thực nghiệm Lần thứ Size = Size = 21 Size = 39 Size = 49 Size = 81 10 Average 3300 1400 1401 1700 1500 1400 1401 2201 2100 1600 1800.3 26299 27899 23800 12400 14300 35000 7500 28501 8500 17700 20189.0 40000 24399 36600 73300 77900 25200 38399 24599 36601 37800 41479.8 152100 65200 25100 42500 68701 42800 25300 48100 36600 30200 53660.1 158500 115000 144600 128301 192800 108000 108099 291001 64000 309801 162092.2 lOMoARcPSD|11119511 Mơ hình thực nghiệm Time-average(nanoseconds) 180000 160000 140000 120000 100000 80000 60000 40000 20000 21 39 Size 49 81 ... cáo thuật toán xếp bản: - Sắp xếp chèn (Insertion sort) Sắp xếp chọn (Selection sort) Sắp xếp bọt (Bubble sort) Sắp xếp đổi chỗ trực tiếp (Interchange sort) Phần II: Cơ sở lý thuyết 2.1 Các khái... lập trình Trong lập trình có khơng 20 thuật tốn phục vụ cho cơng việc xếp 1.2 Mục đích đề tài: Trong đề tài tìm hiểu khảo sát thuật toán xếp Các thuật toán xếp có điểm chung xây dựng sở liệu so... Đồ thị thời gian chạy thuật toán: 3.3 Sắp xếp bọt (Bubble sort) Giải thuật xếp bọt(Bubble Sort) thuật toán phân loại đơn giản mà sử dụng để xếp mảng cấu trúc Giải thuật xếp tiến hành dựa việc