Báo cáo cài đặt và đánh giá hiệu năng bốn thuật toán sắp xếp (Bubble Sort, Interchange Sort, Selection Sort, Insertion Sort) có code C++

29 186 1
Báo cáo cài đặt và đánh giá hiệu năng bốn thuật toán sắp xếp (Bubble Sort, Interchange Sort, Selection Sort, Insertion Sort) có code C++

Đ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

Trong hầu hết các hệ lưu trữ, quản lý dữ liệu hiện nay, thao tác tìm kiếm và sắp xếpthường được sử dụng rất nhiều để khai thác thông tin một cách nhanh chống và hiệu quả.(Ví dụ: Quản lý điểm học sinh, tra cứu sách thư viện…) và muốn quá trình tìm kiếm đượcdiễn ra nhanh chống thì dữ liệu cần phải được sắp xếp gọn gàng theo một trật tự nhấtđịnh. Để làm được việc đó, ta cần phải cân nhắc sử dụng đến các thuật toán sắp xếp đểquá trình đó được thực hiện hiệu quả và nhanh chống nhất.Hiện nay, đã có nhiều giải thuật tìm kiếm và sắp xếp được xây dựng, mức độ hiệu quảcủa từng giải thuật còn phụ thuộc và tính chất của cấu trúc dữ liệu cụ thể mà nó tác độngđến. Cho nên, ta nên lựa chọn các phương pháp sắp xếp sao cho phù hợp. Trong khoa họcmáy tính và trong toán học, một thuật toán sắp xếp là một thuật toán sắp xếp các phần tửcần sắp xếp là các số. Hầu hết các bài toán đều có nhiều cách khác nhau để giải quyếtchúng.Nội dung được trình bài trong đồ án này là những thuật toán sắp xếp thông dụng nhấtmức độ phức tạp ở mức tương đối và dễ dàng cài đặt. Đó là các thuật toán sắp xếp như:Thuật toán sắp xếp nổi bọt (Bubble Sort), thuật toán đổi chổ trực tiếp (Interchange Sort),thuật toán chọn trực tiếp (Selection Sort), thuật toán chèn trực tiếp (Insertion Sort). Ngoàira, còn trên dưới hơn một chục thuật toán khác nữa, nhưng trong chủ đề này chỉ tìm hiểu,cài đặt và đánh giá hiệu năng bốn thuật toán trên.

TRƯỜNG ĐẠI HỌC ĐỒNG THÁP KHOA KỸ THUẬT - CÔNG NGHỆ 0018413051 - DƯƠNG TẤN THÀNH ĐỒ ÁN MÔN HỌC CÀI ĐẶT BỐN GIẢI THUẬT SẮP XẾP VÀ ĐÁNH GIÁ HIỆU NĂ Mã số báo cáo: NGÀNH: KHOA HỌC MÁY TÍNH LỚP: DHCNTT18 TRƯỜNG ĐẠI HỌC ĐỒNG THÁP KHOA KỸ THUẬT - CÔNG NGHỆ 0018413051 - DƯƠNG TẤN THÀNH ĐỒ ÁN MÔN HỌC CÀI ĐẶT BỐN GIẢI THUẬT SẮP XẾP VÀ ĐÁNH GIÁ HIỆU NĂ Mã số báo cáo: NGÀNH: KHOA HỌC MÁY TÍNH LỚP: DHCNTT18 Giảng viên hướng dẫn: Thạc sĩ Nguyễn Thị Mỹ Dung Đồng Tháp, tháng … năm … LỜI DẪN Trong hầu hết hệ lưu trữ, quản lý liệu nay, thao tác tìm kiếm xếp thường sử dụng nhiều để khai thác thông tin cách nhanh chống hiệu (Ví dụ: Quản lý điểm học sinh, tra cứu sách thư viện…) muốn trình tìm kiếm diễn nhanh chống liệu cần phải xếp gọn gàng theo trật tự định Để làm việc đó, ta cần phải cân nhắc sử dụng đến thuật tốn xếp để q trình thực hiệu nhanh chống Hiện nay, 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 cịn phụ thuộc tính chất cấu trúc liệu cụ thể mà tác động đến Cho nên, ta nên lựa chọn phương pháp xếp cho phù hợp Trong khoa học máy tính toán học, thuật toán xếp thuật toán xếp phần tử cần xếp số Hầu hết tốn có nhiều cách khác để giải chúng Nội dung trình đồ án thuật tốn xếp thông dụng mức độ phức tạp mức tương đối dễ dàng cài đặt Đó thuật toán xếp như: Thuật toán xếp bọt (Bubble Sort), thuật toán đổi chổ trực tiếp (Interchange Sort), thuật toán chọn trực tiếp (Selection Sort), thuật tốn chèn trực tiếp (Insertion Sort) Ngồi ra, cịn chục thuật toán khác nữa, chủ đề tìm hiểu, cài đặt đánh giá hiệu bốn thuật toán DANH MỤC HÌNH ẢNH DANH MỤC BẢNG MỤC LỤC PHẦN I: MỞ ĐẦU -oOo - Đặt vấn đề Một vấn đề việc xây dựng sở liệu xếp tập hợp phần tử theo thứ tự Đây cơng việc quan trọng liệu hệ thống thường không xếp theo trật tự định, gây vấn đề khó khăn ta cần truy cập vào liệu hệ thống Nhất việc lưu trữ liệu lớn (Big data) vấn đề tốc độ truy cập liệu đặt lên hàng đầu Và giải pháp ta ứng dụng thuật toán xếp cách hiệu Có nhiều thuật tốn xếp, thuật tốn có ưu nhược điểm định, việc quan trọng ta phải hiểu biết chuyên sâu thuật toán biết cách áp dụng vào thực tế xây dựng hệ quản trị sở liệu Qua đó, em chọn đề tài : Cài đặt bốn giải thuật xếp đánh giá hiệu để tìm hiểu rõ thuật tốn xếp thuật toán xếp bọt (Bubble Sort), thuật toán đổi chổ trực tiếp (Interchange Sort), thuật toán chọn trực tiếp (Selection Sort), thuật toán chèn trực tiếp (Insertion Sort) Mục tiêu Tìm hiểu, cài đặt đánh giá hiệu bốn thuật toán xếp: Thuật toán xếp bọt (Bubble Sort), thuật toán đổi chổ trực tiếp (Interchange Sort), thuật toán chọn trực tiếp (Selection Sort), thuật tốn chèn trực tiếp (Insertion Sort) ngơn ngữ lập trình C++ với trình biên dịch Visual Studio 2019 Nhằm thực việc xếp số nguyên số thực theo thứ tự tăng dần giảm dần xuất đồng thời so sánh thời gian thực thuật tốn, nhập xuất file để lưu lại kết thực Áp dụng linh hoạt kiểu lập trình lập trình hướng cấu trúc lập trình hướng đối tượng Phạm vi nghiên cứu Tìm hiểu vận dụng xây dựng chương trình dựa lý thuyết thuật toán xếp như: thuật toán xếp bọt (Bubble Sort), thuật toán đổi chổ trực tiếp (Interchange Sort), thuật toán chọn trực tiếp (Selection Sort), thuật toán chèn trực tiếp (Insertion Sort) Phương pháp nghiên cứu + Nghiên cứu tài liệu + Phân tích giải thuật + Tìm hiểu giải thuật + Phân tích độ phức tạp thuật tốn + Nghiên cứu thực nghiệm + Tổng hợp tài liệu Kế hoạch thực đề tài Bảng Kế hoạch thực đề tài Thời gian (từ ngày … Đến ngày …) Công việc thực Nhận đề tài Người thực Dương Tấn Thành Liên hệ giảng Dương Tấn Thành viên hướng dẫn Tìm hiểu sưu tập tài liệu Dương Tấn Thành Tiến hành viết chương trình Dương Tấn Thành Hồn thành chương trình Dương Tấn Thành Hoàn thành viết báo cáo Dương Tấn Thành Đánh giá công việc Ghi PHẦN II: NỘI DUNG -oOo CHƯƠNG CƠ SỞ LÝ THUYẾT Một số lý thuyết ứng dụng việc xây dựng demo a) Giới thiệu thuật toán xếp Sắp xếp trình biến đổi danh sách đối tượng thành danh sách thoải mãn thứ tự xác định Sắp xếp đóng vai trị quan trọng tìm kiếm liệu Chẵng hạn, danh sách xếp theo thứ tự tăng dần (hoặc giảm dần), ta sử dụng kỹ thuật tìm kiếm nhị phân hiệu nhiều tìm kiếm tuần tự… Trong thiết kế thuật toán, ta thường xuyên cần đến xếp, nhiều thuật toán thiết kế dựa ý tưởng xử lý đối tượng theo trật tự xác định Các thuật toán xếp chia thành hai loại: xếp xếp Sắp xếp thực mà đối tượng cần xếp lưu nhớ máy tính dạng mảng, xếp gọi xếp mảng Khi đối tượng cần xếp lớn ta cần lưu nhớ dạng file, ta cần sử dụng phương pháp xếp ngồi, hay cịn gọi xếp file Trong chương trình ta trình bày thuật tốn xếp đơn giản, thuật tốn địi hỏi thời gian O (n2) để xếp mảng n đối tượng Mảng cần xếp mảng số nguyên, mảng số thực, mảng xâu ký tự Trong trường hợp tổng quát, đối tượng cần xếp có chứa số thành phần liệu Thành phần liệu cịn gọi khóa xếp Chẳng hạn, ta có mảng đối tượng sinh viên, sinh viên gồm thành phần liệu: tên, tuổi, chiều cao ta muốn xếp cho sinh viên theo thứ tự chiều cao tăng Khi đó, chiều cao khóa xếp Từ sau, ta giả thuyết rằng, mảng cần xếp mảng liệu người dùng tự định nghĩa có tên KieuThuatToan với cấu trúc sau: typedef struct { float ThoiGianThucThi; float Temp; float TBC; }KieuThuatToan; b) Dev C++ Dev C++ chương trình phát triển thích hợp tự (IDE) phân phối hình thức giấy phép cơng cộng GNU hỗ trợ việc lập trình c++ Nó nằm trình dịch mã nguồn mở MinGW Chương trình IDE viết ngôn ngữ Delphi Dự án phát triển Dev C++ lưu trữ SourceForge Dev C++ nguyên phát triển lập trình viên có tên Colin Laplace chạy hệ điều hành Windows Bloodshed Dev C++ môi trường phát triển tích hợp IDE có hỗ trợ đầy đủ tính cho ngơn ngữ lập trình C++ Nó sử dụng trình MinGW GCC (Bộ trình dịch GNU) làm trình biên dịch Dev C++ dùng kết hợp với Cygwin hay trình dịch nảng GCC khác Chương trình cho người dùng có cảm nhận giống với hình thức chương trình Microsoft Visual Studio vốn sử dụng rộng rãi Dev có đặc điểm phụ sử dụng DevPaks, phần gồm gói mở rộng so với môi trường tiêu chuẩn, bao gồm thư viện, mẫu tiện ích chưa thêm vào DevPaks thường có, khơng định, tiện ích GUI (giao diện người dùng đồ họa), bao gồm công cụ phổ biến GTK+, wxWidgets FLTK Có DevPaks có chứa thư viện với chí nhiều hàm chức cao Dev C++ nói chung chương trình chạy windows Tuy nhiên, có phiên cho Linux, giai đoạn alpha chưa cập nhật năm qua Hình Giao diện Dev C++ Hướng dẫn sử dụng Dev C++ Bước 1: Downloand phiên Bloodshed Dev C++ đường dẫn https://sourceforge.net/projects/orwelldevcpp/ Hình Đường dẫn tải Dev C++ Bước 2: Sau cài đặt ứng dụng, khởi động phần mềm lên cách click chuột vào biểu tượng icon Bloodshed Dev C++ Desktop (Khi cài đặt chọn Desktop) Bước 3: Để tạo file bạn nhấn Ctrl + N File / New / Source File Hình Tạo File Bước 5: Để tùy chỉnh trình soạn thảo vào Tools > Editor Options Hình Tùy chọn 10 Hình Đồ thị so sánh tốc độ xử lý thuật toán xếp phức tạp Trong trường hợp tốc độ ưu tiên hàng đầu, giải thuật thuộc nhóm O(n log n) nên sử dụng Chú ý thời gian đồ thị đo theo phần 10 giây thay trăm giây đồ thị nhóm O(n2) Tuy nhiên thứ khơng thật dễ dàng với ứng dụng thực tiễn, bạn phải đứng trước lựa chọn cân (trade-offs) yếu tố Những thuật tốn thuộc nhóm O(n log n) nhanh, tốc độ có phải trả giá cho phức tạp triển khai Trong trường hợp đệ quy, cấu trúc liệu nâng cao, mảng đa chiều việc sử dụng thuật toán tạo nhiều vấn đề phát sinh khó chịu 15 Các giải thuật a Giải thuật xếp bọt Bubble Sort Sắp xếp bọt (bubble sort): thuật toán xếp đơn giản, với thao tác so sánh hai phần tử kề nhau, chúng chưa đứng thứ tự đổi chỗ (swap) Có thể tiến hành từ xuống (bên trái sang) từ lên (bên phải sang) Nó cịn có tên xếp so sánh trực tiếp Nó sử dụng phép so sánh phần tử nên giải thuật xếp kiểu so sánh Đánh giá: + Số phép so sánh: O(n2) + Số lần hoán vị tối đa: O(n2) + Độ phức tạp: O(n2) Ngôn ngữ mã giả: Bước 1: xét phần tử a[j] (j từ n-1 đến 1), khóa a[j] nhỏ khóa a[j-1] hốn vị a[j] a[j-1] Sau bước a[0] có khóa nhỏ Bước 2: xét phần tử a[j] (j từ n-1 đến 2) khóa a[j] nhỏ khóa a[j-1] hốn vị a[j] a[j-1] Sau bước a[1] có khóa nhỏ thứ Sau n-1 bước dừng lại Code chương trình C++: void BubbleSort() { for (int i = 0; i < n - 1; i++) { for (int j = n - 1; j > i; j ) { if (a[j] < a[j - 1]) { sawp(a[j], a[j - 1]); } 16 } } } c) Giải thuật đổi chỗ trực tiếp Interchange Sort Như biết, để xếp dãy số, ta xét nghịch có dãy triệt tiêu dần chúng Ý tưởng giải thuật xuất phát từ đầu dãy, tìm tất nghịch chứa phần tử này, triệt tiêu chúng cách đổi chổ phần tử với phần tử tương ứng cặp nghịch Lặp lại xử lý với phần tử theo dãy Ngôn ngữ mã giả: Bước 1: i=0; / Bắt đầu từ đầu dãy Bước 2: j = i+1; // Tìm tất phần tử a[j]i Bước 3: Trong j < N thực Nếu a[j]= 0) && (a[pos] > key { 19 a[pos + 1] = a[pos]; pos ; } a[pos + 1] = key; // chèn key vào dãy } } Xây dựng chương trình Demo ngơn ngữ C++ a Các chức chương trình Cài đặt bốn giải thuật xếp: xếp bọt Bubble Sort, đổi chỗ trực tiếp Interchange Sort, xếp chọn Selection Sort, xếp chèn Insertion Sort Cài đặt chức thiết kế Menu: + Lựa chọn giải thuật, lựa chọn cách nhập dãy số từ bàn phím, nhập từ file sử dụng cấp phát động + Xuất kết hình, sử dụng File xuất kết File + So sánh hiệu thuật tốn với + Thốt chương trình f) Các hàm sử dụng chương trình void PhongChu(){ … } // Tùy chỉnh kích thước Form hình Console void SetColor(){ … } // Tùy chỉnh màu void Nhap(){ … } // Thủ tục nhập void Random(){ … } // Thủ tục cấp phát động void Xuat(float t, bool SoSanh, bool XuatBT){ … } // Thủ tục xuất kết void sawp(float& xp, float& yp){ … } // Thủ tục đổi chỗ hai phần tử void XuatFile(float T){ … } // Xuất liệu file 20 void TiengViet(){ … }// Sử dụng bảng mã UTF-8 để xuất chữ tiếng Việt void BubbleSort(){ … } // Hàm xếp Bubble Sort void InterchangeSort(){ … } // Hàm xếp Interchange Sort void SelectionSort(){ … } // Hàm xếp Selection Sort void InsertionSort(){ … } // Hàm xếp Insertion Sort void TraVeKhong(){ … } // Trả giá trị tất biến “0” void ThuatToanNhanhNhat(){ … } // Tìm thuật toán nhanh void SoSanh(float a[], int n){ … }// Thủ tục so sánh tốc độ xử lý thuật toán void Menu(){ … } // Xuất Menu bắt đầu void Menu2(){ … } // Xuất Menu lựa chọn liệu xử lý void XuLyMenu(){ … } int main(int argc, char* argv[]){ … } // Thủ tục xử lý menu // Hàm Main 21 CHƯƠNG PHÂN TÍCH DEMO Giới thiệu Demo Chương trình Demo chạy ngơn ngữ lập trình C++ Với giao diện hình Console hiển thị sau: Hình Giao diện chương trình Thực nghiệm với thuật tốn xếp bọt Bubble Sort Chọn thuật toán xếp bọt Bubble Sort chọn cách nhập dãy số tự chọn 22 Hình 10 Lựa chọn liệu cần xếp Ta nhập vào dãy số gồm 10 chữ số, kết hiển thị sau: Hình 11 Kết từ dãy số nhập vào 23 Tương tự với cấp phát động lấy liệu từ File: Hình 12 Kết từ dãy số cấp phát động Hình 13 Kết từ File bên 24 Đọc liệu từ File Text: Hình 14 Mở File Text 25 Thực nghiệm so sánh hiệu thuật toán Để dễ dàng so sánh hiệu thuật toán với nhau, ta cần phải nhập vào liệu tương đối lớn Vì vậy, ta sử dụng tính lấy liệu từ File Kết sau thực so sánh lần: Hình 15 Kết so sánh hiệu thuật toán 26 PHẦN III KẾT LUẬN Kết đạt Bằng kiến thức học, kết hợp với tài liệu tham khảo tìm thấy Em hiểu rõ nắm bắt thuật toán xếp, cách xây dựng thuật tốn xếp ngơn ngữ lập trình C++ Các u cầu tính nhiệm vụ đề tài hoàn thành tốt Để xây dựng hoàn chỉnh chương trình, em gặp khơng khó khăn ln cố gắng tìm hướng giải thơng qua ý kiến giảng viên hướng dẫn Mặc khác, em rút nhiều kinh nghiệm quý báo việc xây dựng chương trình ứng dụng thuật tốn xếp thực tế Mặc dù nhiều hạn chế chương trình, em tiếp tục tìm tịi để khắc phục chúng nhằm hỗ trợ tốt trình tự học tập, tự nghiên cứu sau Hạn chế Do hạn chế hình Console nên chưa thể áp dụng kỹ thuật đồ họa vào chương trình Hướng phát triển Sử dụng Visual Studio 2019 lập trình chương trình theo hướng đối tượng để chương trình linh hoạt liệu khai thác dễ dàng Có thể áp dụng lập trình Windows Form MFC C++ để chương trình đẹp mắt dễ sử dụng Xây dựng chương trình nhận nhiều kiểu liệu kiểu mảng, kiểu ký tự, … Và xếp theo nhiều dạng Áp dụng ứng dụng tra từ điển, quản lý thư viện, quản lý phòng Net, … 27 PHỤ LỤC Hướng dẫn cài đặt sử dụng Demo: - Đảm bảo thư mục âm “wav” thư mục văn “inputVS.txt” nằm - thư mục chứa chương trình “AppDemo.exe” File inputVS.txt với qui ước dòng hiển thị số phần tử có dãy, dịng hiển thị dãy phần tử Nên tắt chương trình diệt Virut trước chạy chương trình Để chạy chương trình nhấn AppDemo.exe Chương trình xếp phần tử số thực theo chiều từ bé đến lớn TÀI LIỆU THAM KHẢO [1] Đỗ Xn Lơi (2004), “Giáo trình cấu trúc liệu giải thuật”, NXB Giáo dục [2] Hồ Sĩ Đàm (2007), “Cấu trúc liệu giải thuật”, NXB Giáo dục [3] Nguyễn Đình Hóa (2008), “Cấu trúc liệu giải thuật”, NXB ĐH Quốc gia Hà Nội [4] Trần Cao Đệ (1995), “Bài giảng cấu trúc liệu giải thuật”, NXB ĐH Cần Thơ [5] Nguyễn Văn Linh (2003), “Giải thuật”, NXB ĐH Cần Thơ ... ĐẠI HỌC ĐỒNG THÁP KHOA KỸ THUẬT - CÔNG NGHỆ 0 018 413 0 51 - DƯƠNG TẤN THÀNH ĐỒ ÁN MÔN HỌC CÀI ĐẶT BỐN GIẢI THUẬT SẮP XẾP VÀ ĐÁNH GIÁ HIỆU NĂ Mã số báo cáo: NGÀNH: KHOA HỌC MÁY TÍNH LỚP: DHCNTT18 Giảng... xử lý tập liệu có 10 0 phần tử so với tập có 10 phần tử (10 * 10 = 10 0) Nếu độ phức tạp O(n2), phải tiêu tốn thời gian gấp 10 0 lần để xử lý tập 10 0 phần tử so với tập liệu gồm 10 phần tử Bên cạnh... (j từ n -1 đến 1) , khóa a[j] nhỏ khóa a[j -1] hốn vị a[j] a[j -1] Sau bước a[0] có khóa nhỏ Bước 2: xét phần tử a[j] (j từ n -1 đến 2) khóa a[j] nhỏ khóa a[j -1] hốn vị a[j] a[j -1] Sau bước a [1] có

Ngày đăng: 09/11/2020, 13:48

Mục lục

  • 3. Phạm vi nghiên cứu

  • 4. Phương pháp nghiên cứu

  • 5. Kế hoạch thực hiện đề tài

  • PHẦN II: NỘI DUNG

    • CHƯƠNG 1. CƠ SỞ LÝ THUYẾT

      • 1 Một số lý thuyết ứng dụng trong việc xây dựng demo

      • a) Giới thiệu thuật toán sắp xếp

      • CHƯƠNG 2. XÂY DỰNG CHƯƠNG TRÌNH

        • 1 Tổng quan về thuật toán

        • a Giải thuật sắp xếp nổi bọt Bubble Sort

        • c) Giải thuật đổi chỗ trực tiếp Interchange Sort

        • d) Giải thuật sắp sếp lựa chọn Selection Sort

        • e) Giải thuật sắp xếp chèn Insertion Sort

        • 6. Xây dựng chương trình Demo trên ngôn ngữ C++

        • a Các chức năng chính của chương trình

        • f) Các hàm cơ bản được sử dụng trong chương trình

        • CHƯƠNG 3. PHÂN TÍCH DEMO

          • 1 Giới thiệu Demo

          • 1 Thực nghiệm với thuật toán sắp xếp nổi bọt Bubble Sort

          • 7. Thực nghiệm so sánh hiệu năng các thuật toán

          • PHẦN III. KẾT LUẬN

            • 1 Kết quả đạt được

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

Tài liệu liên quan