Tìm hiểu các thuật toán sắp xếp và đánh giá để so sánh

31 228 0
Tìm hiểu các thuật toán sắp xếp và đánh giá để so sánh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đồ án Cấu trúc liệu Giải thuật LỜI MỞ ĐẦU Ngày với phát triển nhảy vọt khoa học vơng nghệ nói chung ngành tin học nói riêng,với tính ưu việt, tiện dụng ứng dụng rộng rãi, tin học ngày phần thiếu nhiều ngành công xây dựng phát triển xã hội Hơn sâu đời sống người Tin học thâm nhập mạnh mẽ vào Việt Nam, nhiều lĩnh vực hoạt động từ lĩnh vực quản lý hành chính, quản lý kinh tế, tự động hóa cơng nghiệp …đến lĩnh vực giáo dục đào tạo có thay đổi đáng kể nhờ ứng dụng tin học Máy tính cơng cụ cần thiết người thời đại ngày Trong mơn học Tốn – Tin, đặc biệt ngành Cơng nghệ thơng tin, thuật tốn đóng vai trò vơ quan trọng Việc nắm vững thuật tốn giúp ta tìm hướng giải vấn đề nhanh hơn, viết code mạch lạc Nắm vững thuật toán, cấu trúc liệu, ta ước tính độ phức tạp code, đánh giá code chạy nhanh hay chậm, có bền vững hay khơng Đây kĩ vô cần thiết để trở thành kĩ sư giỏi Vì khoa Tin tập trung việc giảng dạy mơn Phân tích Thiết kế giải thuật Bên cạnh đó, sinh viên em thực hành kiểm tra trình độ qua việc làm Đồ án Giải thuật & Lập trình với đề tài cụ thể thiết thực Mặc dù em cố gắng nổ lực để làm đồ án kinh nghiệm hạn chế kiến thức em nắm chưa sâu nên em biết không tránh khỏi thiếu sót Em mong nhận thơng cảm đóng góp Thầy, Cơ để lần sau làm đồ án tốt Hoàn thành đồ án Giải thuật & Lập trình niềm vui em, em biết ơn Thầy Hồ Ngọc Tú hướng dẫn chúng em tận tình suốt thời gian chúng em làm đồ án Một lần nhóm chúng em xin gửi lời cám ơn chân thành đến Thầy Trang Đồ án Cấu trúc liệu Giải thuật MỤC LỤC LỜI MỞ ĐẦU MỤC LỤC DANH MỤC HÌNH VẼ GIỚI THIỆU ĐỀ TÀI CƠ SỞ LÝ THUYẾT 2.1 Thuâ ̣t toán 2.2 Đô ̣ phức ta ̣p thuâ ̣t toán 2.3 Thuâ ̣t toán sắ p xế p 2.4 Giải thuâ ̣t chia để tri ̣(Devide and Conquer) TỔ CHỨC CẤU TRÚC DỮ LIỆU THUẬT TOÁN 3.1 Phát biểu toán 3.2 Cấu trúc liệu 3.3 Thuật toán 3.3.1 Sắ p xế p cho ̣n (Selection Sort) 3.3.2 Sắ p xế p chèn (Insertion Sort) 11 3.3.3 Sắ p xế p nổ i bo ̣t (Bubble Sort) 14 3.3.4 Sắ p xế p trô ̣n (Merge Sort) 17 3.3.5 Sắ p xế p nhanh (Quick Sort) 21 CHƯƠNG TRÌNH KẾT QUẢ 24 4.1 Tổ chức chương trình 24 4.2 Ngôn ngữ cài đặt 27 4.3 Kết 28 4.3.1 Giao diện chương trình 28 4.3.2 Kết thực thi chương trình 29 4.3.3 Nhận xét 31 KẾT LUẬN HƯỚNG PHÁT TRIỂN 31 5.1 Kết luận 31 5.2 Hướng phát triển 31 TÀI LIỆU THAM KHẢO 32 Trang Đồ án Cấu trúc liệu Giải thuật DANH MỤC HÌNH VẼ Trang Đồ án Cấu trúc liệu Giải thuật GIỚI THIỆU ĐỀ TÀI Hiê ̣n nay, có rấ t nhiều vấn đề phổ biến lĩnh vực thực tiễn khoa học máy tính, ứng dụng sở liệu, mạng trí tuệ nhân tạo Một những vấn đề nhấ t thuật tốn xếp, mơ ̣t vấn đề thu hút nhiều nghiên cứu Quá triǹ h xếp q trình bớ trí lại phầ n tử theo mô ̣t trâ ̣t tự nhấ t định để cho viê ̣c xử lý trở nên dễ dàng và hiê ̣u quả so với xử lý phần tử ngẫu nhiên Sắp xếp giải thuâ ̣t lập trình phổ biến nhất, ví dụ lấy sở liệu ứng dụng, chúng ta muốn quản lý thông tin để thuâ ̣n tiê ̣n cho viê ̣c tìm kiế m, chúng ta phải giữ thông tin theo thứ tự hợp lý, ví dụ: thứ tự chữ theo tên, thứ tự tăng dần hoă ̣c giảm dần theo mã ID, lương, ngày nhâ ̣n vào làm viê ̣c, Sự tăng trưởng thơng tin mơ ̣t cách nhanh chóng đã kéo theo sự phát triển của thuật toán xếp Các thuâ ̣t toán này đươ ̣c phát triể n nhằ m nâng cao hiê ̣u suấ t và giảm thiể u đô ̣ phức ta ̣p Dữ liê ̣u có thể xuấ t hiê ̣n dưới nhiề u dạng khác và thường phải lưu trữ mô ̣t khố i lươ ̣ng đáng kể , nên viê ̣c xây dựng các thuâ ̣t toán sắ p xế p cho phép tìm kiếm nhanh đem lại ý nghiã rấ t lớn Hiê ̣n nay, có rấ t nhiề u thuâ ̣t toán sắ p xế p đời xếp chọn, sắ p xế p nổ i bọt, sắ p xế p chèn, sắ p xế p trô ̣n, sắ p xế p nhanh, thuâ ̣t toán đề u có chế khác nhằ m làm tăng hiệu suất hiệu ứng dụng thực tế giảm độ phức tạp thời gian ứng dụng Khi so sánh thuật tốn xếp khác nhau, có ba yếu tố cầ n đươ ̣c xem xét: độ phức tạp thời gian, ổn định và không gian nhớ Qua viê ̣c so sánh, chúng ta hiểu rõ về ưu điể m, khuyế t điểm của các thuâ ̣t toán xế p, từ đó ̣n du ̣ng đúng thuâ ̣t toán theo yêu cầ u của bài toán đă ̣t mô ̣t cách hiê ̣u và đó cũng là mu ̣c đích của đề tài này CƠ SỞ LÝ THUYẾT 2.1 Th ̣t toán Thuật tốn , gọi giải thuật, tập hợp hữu hạn hay dãy quy tắc chặt chẽ thị, phương cách hay trình tự thao tác đối tượng cụ thể xác định định nghĩa rõ ràng cho việc hoàn tất số việc từ trạng thái ban đầu cho trước; thị áp dụng triệt để dẫn đến kết sau dự đoán trước Nói cách khác, thuật tốn quy tắc hay quy trình cụ thể nhằm giải vấn đề số bước hữu hạn, nhằm cung cấp kết từ tập hợp kiện đưa vào [1] Trang Đồ án Cấu trúc liệu Giải thuật Một thuật tốn có tính chất sau: - Tính xác: để đảm bảo kết tính tốn hay thao tác mà máy tính thực xác Tính rõ ràng: Thuật tốn phải thể câu lệnh minh bạch; câu lệnh xếp theo thứ tự định Tính khách quan: Một thuật toán dù viết nhiều người nhiều máy tính phải cho kết Tính phổ dụng: Thuật tốn khơng áp dụng cho tốn định mà áp dụng cho lớp tốn có đầu vào tương tự Tính kết thúc: Thuật tốn phải gồm số hữu hạn bước tính tốn 2.2 Đợ phức ta ̣p thuâ ̣t toán Độ phức tạp thuật toán hàm phụ thuộc vào độ lớn liệu đầu vào Để ướ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 Θ Giả sử f(n) g(n) hàm thực không âm đối số ngun khơng âm n Ta nói “g(n) O f(n)” viết là: g(n) = O(f(n)) tồn số dương C n0 cho g(n) = n0 Việc xác định độ phức tạp tính tốn giải thuật thực tế tính số quy tắc đơn giản sau: - Quy tắc bỏ số: T(n) = O(c.f(n)) = O(f(n)) với c số dương Quy tắc lấy max: T(n) = O(f(n)+ g(n)) = O(max(f(n), g(n))) Quy tắ c cô ̣ng: O(f(n)+g(n))=max{O(f(n)),O(g(n))} Quy tắ c nhân: O(f(n).g(n))=O(f(n)).O(g(n)) 2.3 Thuâ ̣t toán sắ p xế p Sắp xếp q trình biế n đở i mô ̣t danh sách các phầ n từ thành mô ̣t danh sách thỏa mañ mô ̣t thứ tự xác đinh ̣ nào đó, nhằ m có lợi cho việc quản lý và đinh ̣ vi ̣ thông tin Sắ p xế p đóng vai trò vô cùng quan tro ̣ng tim ̀ kiế m dữ liê ̣u Chẳ ng ̣n, đã có danh sách sắ p xế p theo thứ tự tăng dầ n (hoă ̣c giảm dầ n), ta có thể sử du ̣ng thuật toán tìm kiế m nhi ̣phân, hiê ̣u quả nhiề u so với tìm kiế m tuầ n tự Trên thực tế , nhiề u thuật toán đươ ̣c đưa dựa ý tưởng xử lý các đố i tươ ̣ng theo mô ̣t thứ tự xác đinh ̣ nên sắ p xế p là mô ̣t giải thuâ ̣t rấ t quan trọng và cầ n thiế t Các thuâ ̣t toán sắ p xế p đươ ̣c chia làm loa ̣i: internal sorting external sorting Với internal sorting, toàn liệu cần xếp đưa vào nhớ trong, kích thước liệu cần xếp nhỏ thời gian xếp thực nhanh Với Trang Đồ án Cấu trúc liệu Giải thuật external sorting, phần nhỏ liệu cần xếp đưa vào nhớ trong, phần lớn liệu lại lưu nhớ ngồi, kích thước liệu cần xếp lúc lớn, thời gian xếp thực chậm [2] Các thuật toán xếp phát triển để xếp liệu theo nhiều cách khác Ví dụ, mảng số nguyên xếp theo thứ tự từ thấp nhấ t đến cao từ cao đến thấp nhấ t, mảng phần tử chuỗi xếp theo thứ tự bảng chữ Hầu hết thuật toán xếp, xếp lựa chọn, xếp nở i bo ̣t sử dụng kỹ thuật hốn đổi phầ n tử đạt mục tiêu Mỗi thuật toán xếp chọn dựa hiệu trường hợp tốt nhất, trường hợp trung bình trường hợp xấu 2.4 Giải thuâ ̣t chia để tri (Devide and Conquer) ̣ Phương pháp chia để trị (Divide and Conquer) phương pháp quan trọng việc thiết kế giải thuật Ý tưởng phương pháp đơn giản dễ hiểu: Khi cần giải toán, ta tiến hành chia tốn thành tốn nhỏ Tiếp tục chia tốn nhỏ khơng thể chia thêm nữa, ta giải toán nhỏ cuối kết hợp giải pháp tất tốn nhỏ để tìm giải pháp toán ban đầu Giải thuâ ̣t chia để trị bao gồ m tiến triǹ h: - - Chia nhỏ: Trong bước này, chia toán ban đầu thành toán Mỗi toán nên phần tốn ban đầu Nói chung, bước sử dụng phương pháp đệ qui để chia nhỏ tốn khơng thể chia thêm Khi đó, tốn gọi "atomic – nguyên tử", chúng biểu diễn phần tốn ban đầu Giải bài toán con: Trong bước này, toán giải Kế t hơ ̣p lời giải: Sau toán giải, bước kết hợp chúng cách đệ qui để tìm giải pháp cho tốn ban đầu [3] TỔ CHỨC CẤU TRÚC DỮ LIỆU THUẬT TỐN 3.1 Phát biểu tốn Đầ u vào (Input): tệp chứa mảng các phần tử số nguyên Phương pháp (Method): xếp chọn, sắ p xế p chèn, xế p nổ i bọt, sắ p xế p trô ̣n, sắ p xế p nhanh Đầu (Output): tê ̣p chứa mảng các phầ n tử số nguyên đã đươ ̣c sắ p xế p theo thứ tự tăng dầ n Trang Đồ án Cấu trúc liệu Giải thuật 3.2 Cấu trúc liệu - Sử du ̣ng mảng để triể n khai giải thuâ ̣t - int array[]; // chứa các phầ n tử của dãy số cầ n đươ ̣c sắ p xế p - int n; // số phầ n tử của mảng 3.3 Thuật toán 3.3.1 Sắp xế p cho ̣n (Selection Sort) 3.3.1.1 Ý tưởng Phương pháp xếp lựa chọn xếp mảng cách liên tục tìm phần tử nhỏ từ phần mảng chưa xếp đưa vị trí đầu mảng Cụ thể, duyệt mảng A ban đầu gồm n phần tử A[0], A[1], …, A[n-1] Chọn phần tử nhỏ sau đưa vị trí mảng hành Vậy ta có phần tử A[0] xếp theo thứ tự, loại phần tử khỏi mảng xét Tiếp tục duyệt mảng gồm n-1 phần tử, vị trí A[1] Chọn phần tử nhỏ đưa vị trí mảng hành, sau loại phần tử khỏi mảng xét Vậy ta có phần tử A[0], A[1] xếp theo thứ tự Tổng quát, ta duyệt mảng gồm n-i phần tử, A[i] (i =  n-2), chọn phần tử nhỏ đưa vị trí A[i] Cuối ta thu mảng xếp theo thứ tự 3.3.1.2 Thuâ ̣t toán Input: Mảng A[] gồm n phần tử Output: Mảng A[] gồm n phần tử xếp  Bước 1: i = 0;  Bước 2: Tìm phần tử nhỏ A[min] mảng xét, từ A[i] đến A[n-1];  Bước 3: Hoán vị A[min] với A[i];  Bước 4: i=i+1 Nếu i < n-1, quay lại bước 2; Ngược lại: kết thúc Trang Đồ án Cấu trúc liệu Giải thuật 3.3.1.3 Minh ho ̣a thuâ ̣t toán j = 19 i=0 15 22 A[min] 13 27 20 12 23 24 25 10 A[min] i=1 10 22 13 27 20 12 23 24 25 15 20 22 23 24 25 15 A[min] j = 39 i=2 10 22 13 27 j = 49 i=3 10 12 13 27 20 A[min] 22 23 24 25 15 23 24 25 27 A[min] j = 59 i=4 10 12 13 15 20 22 Tiếp tục i < n-1 Trang Đồ án Cấu trúc liệu Giải thuật 3.3.1.4 đồ khố i Bắt đầu Mảng A, n phần tử i0 F i++ i < n-1 ? T  i J  i+1 F j++ JĐộ phức tạp là: 𝐓(𝐧) = ∑𝒊=𝟎 (𝐧 − 𝐢 − 𝟏) = = O(n2) - 𝟐 - Trường hơ ̣p trung bình: tương tự trường hơ ̣p xấ u nhấ t, đô ̣ phức ta ̣p là O(n2) Trường hơ ̣p tố t nhấ t: đô ̣ phức ta ̣p là O(n2) 3.3.2 Sắp xế p chèn (Insertion Sort) 3.3.2.1 Ý tưởng Phương pháp xếp chèn thực cách chèn phần tử xét vào vị trí thích hợp mảng xếp phía trước Cụ thể, ban đầu, xem phần tử A[0] mảng có thứ tự Sau chèn phần tử A[1] vào vị trí mảng gồm A[0] cho mảng A[0], A[1] xếp theo thứ tự Tiếp tục chèn phần tử A[2] vào vị trí mảng gồm A[0], A[1] cho mảng A[0], A[1], A[2] xếp theo thứ tự Tổng quát, ta thực chèn phần tử A[i] vào mảng gồm A[0], A[1], …, A[i-1] cho mảng A[0], A[1], …, A[i] (i =  n-1) xếp theo thứ tự Cuối ta thu mảng xếp theo thứ tự 3.3.2.2 Thuâ ̣t toán Input: Mảng A[] gồm n phần tử Output: Mảng A[] gồm n phần tử xếp  Bước 1: i = 1;  Bước 2: Gán key = A[i];  Bước 3: Tìm vị trí thích hợp mảng A[0], …, A[i-1] để chèn A[i] vào;  Bước 4: Chèn key vào vị trí vừa tìm được;  Bước 5: i=i+1 Nếu i < n, quay lại bước 2; Ngược lại: kết thúc Trang 11 Đồ án Cấu trúc liệu Giải thuật  Bước 5: Ghép mảng xếp thành mảng sở: - Bước 5.1: So sánh phần tử mảng con; - Bước 5.2: Đưa phần tử nhỏ vào mảng sở, loại phần tử khỏi mảng xét; - Bước 5.3: Kiểm tra mảng rỗng chưa? Nếu sai, quay lại bước 5.1; ngược lại, chuyển đến bước 5.4; - Bước 5.4: Gán tất phần tử lại mảng lại vào mảng sở; 3.3.4.3 Minh ho ̣a thuâ ̣t toán 15 15 15 22 22 13 13 22 15 13 22 13 13 15 12 22 13 20 27 20 27 20 27 12 20 22 23 12 24 23 24 23 12 12 23 24 24 23 23 20 12 27 15 12 20 27 13 22 15 27 20 24 23 24 24 27 Trang 18 Đồ án Cấu trúc liệu Giải thuật 3.3.4.4 đồ khố i Đầu tiên ta xây dựng đồ khối cho công việc ghép mảng thành mảng sở: Merge (A, l, m, r) Bắt đầu Mảng sở A, vị trí bắt đầu l, vị trí kết thúc r, vị trí m n1  m-l+1 n2  r-m Mảng L  Mảng vị trí l, có n1 phần tử Mảng R  Mảng vị trí m+1, có n2 phần tử i  0; j  0; k  l i < n1 && j < n2 ? T A[k]  R[j] j++ F L[i] < R[j] ? A[k]  L[i] i++ k++ A[k]  L[i] i++; k++ T i < n1 ? F Kết thúc F j < n2 ? T A[k]  R[j] j++; k++ Trang 19 Đồ án Cấu trúc liệu Giải thuật đồ khố i hàm MergeSort(A, l, r): Bắt đầu Mảng sở A, vị trí bắt đầu l, vị trí kết thúc r F l

Ngày đăng: 20/05/2019, 19:39

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan