1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu về thuật toán sắp xếp Merge Sort, Quick Sort, Heap Sort và demo chương trình

38 62 0

Đ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

Thông tin cơ bản

Tiêu đề Tìm hiểu về thuật toán sắp xếp Merge Sort, Quick Sort, Heap Sort
Tác giả Trương Lê Minh Hải
Người hướng dẫn TS. Trần Văn Hưng
Trường học Đại học Đà Nẵng
Chuyên ngành Khoa Tin học
Thể loại báo cáo đồ án
Năm xuất bản 2020
Thành phố Đà Nẵng
Định dạng
Số trang 38
Dung lượng 1,75 MB

Nội dung

Hiện nay trong hầu hết các hệ lưu trữ, quản lý dữ liệu, thao tác tìm kiếm thường được thực hiện nhiều nhất để khai thác thông tin một cách nhanh chóng(ví dụ như : tra cứu từ điển, tìm sách trong thư viện...) và muốn việc tìm kiếm cách nhanh chóng thì dữ liệu cần phải được sắp xếp sẵn, ngăn nắp theo một trật tự, hệ thống nhất định sẽ cho phép chúng ta tìm kiếm nhanh, việc tìm kiếm, sắp xếp có ý nghĩa rất lớn trong việc quản lí và lưu trữ .

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC BÁO CÁO ĐỒ ÁN CHUYÊN NGHÀNH TÊN ĐỀ TÀI TÌM HIỂU VỀ THUẬT TỐN SẮP XẾP MERGE SORT, QUICK SORT, HEAP SORT Sinh viên thực hiện: Trương Lê Minh Hải Lớp: 18CNTT3 Giảng viên hướng dẫn: TS Trần Văn Hưng Đà Nẵng 12-2020 LỜI MỞ ĐẦU 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(ví dụ : tra cứu từ điển, tìm sách thư viện ) muốn việc tìm kiếm cách nhanh chóng liệu cần phải xếp sẵn, ngăn nắp theo trật tự, hệ thống định cho phép tìm kiếm nhanh, việc tìm kiếm, xếp có ý nghĩa lớn việc quản lí lưu trữ Do xây dựng hệ quản lý thơng tin máy tính, bên cạnh thuật tốn tìm kiếm, thuật tốn xếp liệu chủ đề quan tâm hàng đầu Hiện có nhiều giải thuật tìm kiếm xếp xây dựng, mức độ hiệu giải thuật phụ thuộc vào tính chất cấu trúc liệu cụ thể mà tác động đến mà ta lựa chọn phương pháp xếp cho phù hợp Trong khoa học máy tính tốn học, thuật toán xếp thuật toán xếp phần tử danh sách (hoặc mảng theo thứ tự tăng dần giảm dần) Người ta thường xét trường hợp phần tử cần xếp số Hầu hết tốn có nhiều thuật toán khác để giải chúng Nội dung giới thiệu trình bày ba thuật tốn xếp thơng dụng nội dung em nghiên cứu đồ án học phần là: Phương pháp xếp trộn ( Merge sort) Phương pháp xếp nhanh ( Quick sort) Phương pháp xếp kiểu vun đống ( Heap sort) Các thuật toán Merge sort, Quick sort, Heap sort, phức tạp hiệu suất cao Các nhóm thuật tốn có điểm chung xây dựng dựa sở so sánh giá trị phần tử mảng (hay so sánh khóa tìm kiếm) Khi xây dựng thuật toán xếp cần ý tìm cách 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 Vậy nên, em thực đồ án “Tìm hiểu thuật tốn xếp Merge Sort, Quick Sort, Heap Sort” để tìm hiểu kĩ thuật tốn ưu nhược điểm Em xin chân thành cảm ơn TS Trần Văn Hưng trực tiếp bảo hướng dẫn em suốt q trình hồn thành khóa luận Và em xin chân thành cảm ơn thầy cô Khoa Tin học nhiệt tình giúp đỡ đào tạo em thời gian vừa qua Em xin trân trọng cảm ơn! Đà Nẵng, ngày tháng 12 năm 2020 Sinh viên thực Trương Lê Minh Hải Ý KIẾN CỦA GIẢNG VIÊN HƯỚNG DẪN ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… …………………………………………… Đà Nẵng,ngày tháng 12 năm 2020 Cán hướng dẫn MỞ ĐẦU Lý chọn đề tài Quá trình xếp q trình bố trí lại phần tử tập đối tượng điển dãy số đó, dãy chữ theo thứ tự từ điển.v.v., nhằm xếp theo thứ tự định theo thứ tự tăng dần (hoặc giảm dần) dãy số, thứ tự từ điển dãy chữ.v.v… Bài toán xếp thường xuất thường xuyên ứng dụng tin học ngơn ngữ nhiều ngơn ngữ lập trình, với u cầu, mục đích khác xếp liệu lưu trữ máy tính theo cách bước khác nhau….Nói chung, liệu xuất nhiều dạng khác thường phải lưu trữ khối lượng liệu đáng kể, nên việc xây dựng giải thuật xếp cho phép tìm kiếm nhanh có ý nghĩa lớn Từ vấn đề nêu giúp cho em hiểu rõ mục đích đề tài là: để xếp dãy số theo trật tự, thứ tự tăng dần (hoặc giảm dần) tùy theo vào yêu cầu người muốn xếp, xếp theo thự tự để giúp cho việc tìm kiếm dễ dàng hơn, qua giúp em hiểu rõ ưu khuyết điểm phương pháp xếp để so sánh tốc độ xếp, từ để vận dụng phương pháp việc xếp theo yêu cầu cùa tốn đặt cách có hiệu mục đích mà em chọn đề tài thuật toán xếp để nghiên cứu Hiện nay, có nhiều loại thuật tốn xếp xây dựng em sâu nghiên cứu loại thuật toán xếp: xếp kiểu vun đống (Heapsort), xếp nhanh (Quicksort), xếp trộn (Mergesort) Mục tiêu nghiên cứu - Tìm hiểu phân tích khái niệm thuật toán xếp Nhận xét ưu điểm nhược điểm thuật toán Đưa đề xuất sử dụng thuật troán trường hợp cụ thể Nghiên cứu so sánh tốc độ giải thuật thuật tốn xếp Mơ cụ thể thuật toán 3.Đối tượng nghiên cứu Nghiên cứu vấn đề sau: - - Tìm hiểu vận dụng lý thuyết thuật tốn xếp: • Thuật tốn xếp trộn ( Merge sort) • Thuật tốn xếp nhanh ( Quick sort) • Thuật tốn xếp kiểu vun đống ( Heap sort) Mơ thuật tốn Phương pháp nghiên cứu - Tổng hợp, phân tích kết nghiên cứu trước từ rút ra, tìm vấn đề cần phải giải đút rút phương pháp giải vấn đề - Tìm phương pháp mở rộng tốn, cải tiến, xây dựng thuật toán để giải vấn đề đặt - Từ thực nghiệm đến chứng minh phương pháp toán học để tính vượt trội cấu trúc mới, thuật tốn - Cài đặt chương trình Demo, cho phép xếp dãy số cho tuỳ ý thành dãy số có thứ tự theo thuật tốn xếp vừa nêu Bố cục đề tài Chương1: Một số kiến thức sở • Trình bày khái niệm thuật tốn, đặc trưng thuật tốn • Độ phức tạp thuật toán Chương 2: Nội dung thuật toán xếp Thuật toán xếp trộn ( Merge sort) • Giải thuật • Đánh giá thuật tốn • Lưu đồ thuật tốn Thuật tốn xếp nhanh ( Quick sort) • Giải thuật • Đánh giá thuật tốn • Lưu đồ thuật tốn Thuật tốn xếp kiểu vun đống ( Heap sort) • • • Giải thuật Đánh giá thuật toán Lưu đồ thuật tốn Chương 3: Mơ thuật tốn Mơ thuật tốn xếp trộn ( Merge sort) Mơ thuật tốn xếp nhanh ( Quick sort) Mơ thuật tốn xếp kiểu vun đống ( Heap sort) Phần III: Kết luận CHƯƠNG 1: MỘT SỐ KIẾN THỨC CƠ SỞ 1.1 Thuật toán 1.1.1 Khái niệm thuật tốn Thuật ngữ “algorithm” (thuật tốn cịn gọi giải thuật) gọi theo tên nhà toán học Ả rập kỷ IX al-Khowarizmi, người viết sách chữ số Hindu – sở kí hiệu số thập phân đại (xem [4], trang 118) Xuất xứ ban đầu từ algorism, dùng để quy tắc thực phép tính số học số thập phân Sau đó, vào kỷ XVIII algorism biến thành algorithm Với quan tâm ngày tăng máy tính, khái niệm thuật toán cho ý nghĩa chung hơn, bao hàm thủ tục xác định để giải tốn, khơng phải thủ tục để thực phép tính số học Thuật toán dãy hữu hạn thao tác xếp theo trình tự xác định cho sau thực dãy thao tác ấy, từ Input tốn ta nhận Output cần tìm Cũng xem thuật tốn cơng cụ để giải toán cụ thể Phát biểu toán định tổng quát mối quan hệ Input/Output cần thiết Thuật tốn mơ tả thủ tục tính tốn cụ thể để đạt mối quan hệ Input/Output Vào khoảng năm 1930 - 1936, nhà tốn học K.Gưdel, S Kleene, A Church, A Turing đề số định nghĩa khác cho khái niệm thuật toán Trong số định nghĩa toán học khác (nhưng tương đương) thuật toán, khái niệm Máy Turing (1937) Hàm đệ quy (1931-1936) sử dụng rộng rãi có nhiều thuận tiện cho nghiên cứu lí thuyết lẫn thực hành 1.1.2 Các đặc trưng thuật tốn Các thuật tốn có số tính chất chung, là: • Đầu vào (Input): Một thuật tốn có giá trị đầu vào từ tập xác định • Đầu (Output): Từ tập giá trị đầu vào, thuật toán tạo giá trị đầu Các giá trị đầu nghiệm tốn • Tính xác định: Các bước thuật tốn phải xác định cách xác • Tính đắn: Một thuật tốn phải cho giá trị đầu tập giá trị đầu vào • Tính hữu hạn: Một thuật tốn phải tạo giá trị đầu sau số hữu hạn (có thể lớn) bước thực tập đầu vào • Tính hiệu quả: Mỗi bước thuật toán phải thực cách xác khoảng thời gian chấp nhận • Tính tổng qt: Thuật tốn cần phải áp dụng cho tập liệu đầu vào tốn, khơng phải cho tập đặc biệt giá trị đầu vào 1.2 Độ phức tạp thuật toán Cần ý thuật tốn giải lớp tốn đó, có nhiều thuật tốn khác giải toán Một vấn đề đặt ta cần chọn thuật toán tốt để giải toán cho Nhưng thuật toán tốt? Thước đo hiệu thời gian máy tính sử dụng để giải toán theo thuật toán xét giá trị đầu vào có kích thước xác định, dung lượng nhớ đòi hỏi để thực thuật tốn Như xem xét đến độ phức tạp tính tốn thuật tốn ta phải xem xét đến độ phức tạp thời gian độ phức tạp không gian Độ phức tạp không gian gắn liền với cấu trúc liệu cụ thể dùng để thực thuật toán Độ phức tạp thời gian: Độ phức tạp thời gian thuật tốn biểu diễn qua số phép toán thực thuật tốn giá trị đầu vào có kích thước xác định Độ phức tạp trường hợp xấu trường hợp phải dùng tối đa phép toán để giải toán theo thuật toán xét Độ phức tạp trường hợp trung bình, trường hợp ta phải tìm số trung bình phép tốn để giải tốn tồn giá trị đầu vào có kích thước cho Các thuật ngữ thường dùng cho độ phức tạp thuật toán: O(1): Độ phức tạp số O(logn): Độ phức tạp lơgarit O(n): Độ phức tạp tuyến tính O(nlogn): Độ phức tạp nlogn O(nb): Độ phức tạp đa thức O(bn), b > 1: Độ phức tạp hàm mũ O(n!): Độ phức tạp giai thừa 1.3 Định nghĩa toán xếp: 1.3.1 Khái niệm xếp:  Ta có bảng tổng kết sau: Trường hợp Độ phức tạp Tốt n*log(n) Trung bình n*log(n) Xấu n2 2.2.3 Lưu đồ thuật toán Xem dãy số cần xếp nhập sẵn: 2.3 Phương pháp xếp trộn (MergerSort) 2.3.1 Nguyên tắc xếp phép trộn: - Để xếp dãy a1, a2, ,an, giải thuật MergeSort dựa nhận xét sau: Mỗi dãy a1, a2, ,an coi tập hợp dãy liên tiếp mà dãy có thứ tự Ví dụ: 12, 2, 8, 5, 1, 6, 4, 15 coi gồm dãy không giảm (12); (2,8); (1,6); (4,5) Dãy có thứ tự coi có dãy Như vậy, cách tiếp cận để xếp dãy tìm cách làm giảm dãy khơng giảm Đây hướng tiếp cận thuật toán xếp theo phương pháp trộn - Trong phương pháp MergeSort, mấu chốt vấn đề cách phân hoạch dãy ban đầu thành dãy Sau phân hoạch xong, dãy ban đầu tách thành dãy phụ theo nguyên tắc phân phối luân phiên Trộn cặp dãy hai dãy phụ thành dãy dãy ban đầu, ta nhận lại dãy ban đầu với số lượng dãy giảm nửa Lặp lại qui trình sau số bước, ta nhận lại dãy gồm dãy không giảm Nghĩa dãy ban đầu xếp 2.3.2 Giải thuật - Giải thuật trộn trực tiếp phương pháp đơn giản Việc phân hoạch thành dãy đơn giản tách dãy n phẩn tử thành n dãy Địi hỏi thuật tốn tính có thứ tự dãy ln thõa cach1 phân hoạch dãy gồm phần tử ln có thứ tự Cứ lần tách trộn, chiều dài dãy nhân đơi - Các bước thực thuật tốn sau: Bước 1: // Chuẩn bị k = 1; // k chiều dài dãy bước thực Bước 2: Tách dãy a1 , a2 ,…, an thành dãy b, c theo nguyên tắc luân phiên nhóm k phần tử: b= a1 , ak , a2k+1 ,…, a3k , c= ak+1 ,., a2k , a3k+1 ,…, a4k , Bước 3: Trộn cặp dãy gồm k phần tử dãy b, c vào a Bước : k = k*2; Nếu k < n trở lại bước Ngược lại : Dừng - Ví dụ : Cho dãy số a : 12 15 2.3.3 Đánh giá giải thuật Ta thấy số lần lặp bước bước thuật toán MergeSort log2n sau lần lặp giá trị k tăng lên gấp đơi Dễ thấy, chi phí thực bước bước tỉ lệ thuận với n Như vậy, chi phí thực giải thuật MergeSort O(nlog2n) Do không sử dụng thông tin đặc tính dãy cần xếp, nên trường hợp thuật tốn chi phí khơng đổi Đây nhược điểm lớn thuật toán 2.3.4 Lưu đồ thuật toán Xem dãy số cần xếp nhập vào sẵn * Lưu đồ thực công việc 1: Begin up = true ; p = d =1 ; m = n Sai up = trues > Sai r0 Sai Đúng s Đúng s r i=1 ; J=n k = n a[ + 1i]; q=p i = i+1 ; s = s-1 Đúng s=p s=m r=p r=m Sai r Đúng k=k+d m=m–s d = -d ; t = k k=q;q=t a[k] = a[j] ; k= k+d j=j–1;r=r-1 m = m -r Gọi đoạn chương trình thực công việc m=0 Sai *Lưu đồ thực chương trình Đúng up = not up p = 2*p p >= n Sai Đúng not up Sai Đúng i 0) shift (a, 0, r); } } void CreateHeap (int a [], int n) { int l; l = n / 2-1; while (l> = 0) { shift (a, l, n-1); l = l-1; } } void shift (int a [], int l, int r) { int x, i, j; i = l; j = * i + 1; x = a [i]; while (j

Ngày đăng: 10/09/2021, 20:41

TỪ KHÓA LIÊN QUAN

w