Tìm hiểu về Thuật Toán Sắp Xếp

48 3.7K 30
Tìm hiểu về Thuật Toán Sắp Xếp

Đ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

Tìm hiểu về Thuật Toán Sắp Xếp

Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpNGHIÊN CỨU KHOA HỌCĐề tài : Tìm hiểu về Thuật Toán Sắp XếpSinh viên thực hiện:Nguyễn Hải Nam 1 Nghiên cứu khoa học Mơ phỏng thuật tốn sắp xếpMục lụcNGHIÊN CỨU KHOA HỌC 1 Đề tài : Tìm hiểu về Thuật Tốn Sắp Xếp 1 Mục lục . 2 PHẦN MỞ ĐẦU 4 1. Lý do chọn đề tài . 4 2. Mục tiêu và nhiệm vụ 5 Chương 1. MỘT SỐ KIẾN THỨC CƠ SỞ . 6 Thuật tốn . 6 Khái niệm thuật tốn 6 Các đặc trưng của thuật tốn . 7 Chương 2. MƠ PHỎNG THUẬT TỐN . 10 Tổng quan về mơ phỏng thuật tốn . 10 Khái niệm mơ phỏng thuật tốn 10 Lịch sử mơ phỏng thuật tốn 11 Tác dụng của mơ phỏng thuật tốn . 14 Kiến trúc của hệ thống mơ phỏng thuật tốn 18 Lựa chọn cơng cụ mơ phỏng thuật tốn 20 Một số u cầu đối với mơ phỏng thuật tốn . 21 Mơ tả đúng theo thuật tốn 21 Hệ thống mơ phỏng phải được thực hiện theo từng bước . 21 Mơ phỏng thuật tốn phải có tính động 21 Phải tạo ra sự phân cấp cho người học . 22 Cấu trúc của mơ phỏng thuật tốn 22 Quy trình thiết kế nhiệm vụ mơ phỏng thuật tốn 23 Nghiên cứu và phân tích giải thuật . 23 Phân tích giải thuật thành nhiều bước, sau đó lần lượt mơ phỏng từng bước đó 26 Phân tích khả năng tổng hợp các bước đã phân tích thành giải thuật . 27 Phân tích những khó khăn và thuận lợi với những người lần đầu tiên biết đến giải thuật . 27 Kết luận 28 CHƯƠNG 3 : CHƯƠNG TRÌNH ỨNG DỤNG THUẬT TỐN SẮP XẾP 29 3.1 CÁC THUẬT TỐN SẮP XẾP ĐƠN GIẢN . 30 3.1.1 Sắp xếp lựa chọn 30 3.1.2 Sắp xếp xen vào . 32 3.1.3 Sắp xếp nổi bọt . 33 3.2 SẮP XẾP HỒ NHẬP 35 Sinh viên thực hiện:Nguyễn Hải Nam 2 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếp3.3 SẮP XẾP NHANH 38 3.4 SẮP XẾP SỬ DỤNG CÂY THỨ TỰ BỘ PHẬN 45 Sinh viên thực hiện:Nguyễn Hải Nam 3 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpPHẦN MỞ ĐẦU1. Lý do chọn đề tàiTrong hai thập kỷ qua, mô phỏng thuật toán đã được các nhà sư phạm của ngành công nghệ thông tin sử dụng như một công cụ có tính chất giúp đỡ trong việc dạy các thuật toán đồ thị, các thuật toán sắp xếp, … khác nhau bằng máy tính. Nguyên nhân của việc mô phỏng thuật toán được sử dụng như một công cụ trợ giúp cho việc giảng dạy là do nó có thể cung cấp các mô phỏng động bằng đồ họa của một thuật toán và các thay đổi trong cấu trúc dữ liệu của nó trong suốt quá trình thực thi.Như một phần của quá trình học thuật toán, những sinh viên ngành công nghệ thông tin sẽ học về cấu trúc của một trình biên dịch (compiler) trong một ngôn ngữ lập trình cho quá trình đó. Điều này sẽ chỉ ra cho chúng ta từng nhiệm vụ của các giai đoạn khác nhau trong trình biên dịch. Hiện nay, một số hệ thống mô phỏng thuật toán được phát triển sau hai thập kỷ. Hầu hết các thuật toán được đề cập đến trong giai đoạn này đều là các hệ thống phổ biến hơn và tinh vi hơn các hệ thống mà thực tế đang sử dụng.Mô phỏng thuật toán ngày càng trở nên hữu ích và trở thành một giáo cụ trực quan rất quan trọng trong hầu hết các lĩnh vực, nhất là trong môi trường giáo dục. Với các nhà sư phạm của ngành công nghệ thông tin thì mô phỏng thuật toán có tác dụng như một tài liệu hướng dẫn trong việc dạy các thuật toán bằng máy tính. Đặc biệt, nó giúp học sinh và sinh viên hiểu cấu trúc dữ liệu và thuật toán nhanh hơn. Như vậy, mô phỏng thuật toán góp phần to lớn vào việc ứng dụng CNTT trong giảng dạy và góp phần vào sự phát triển nhanh chóng của hệ thống elearning.Sinh viên thực hiện:Nguyễn Hải Nam 4 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpThuật toán về sắp xếp rất đa dạng và phong phú. Vì vậy vấn đề “ Mô phỏng thuật toán sắp xếp ” được chọn để nghiên cứu trong khóa luận này.2. Mục tiêu và nhiệm vụ• Nghiên cứu tổng quan về mô phỏng thuật toán.• Hướng đến các kỹ thuật lập trình với mã nguồn mở và ngôn ngữ lập trình C#• Áp dụng kết quả nghiên cứu làm một demo mô phỏng thuật toán sắp xếp3. Cấu trúc khóa luận Chương 1: Một số kiến thức cơ sở• Trình bày khái niệm thuật toán, các đặc trưng của thuật toán• Độ phức tạp của thuật toánChương 2: Mô phỏng thuật toán• Tổng quan về mô phỏng thuật toán• Một số yêu cầu đối với mô phỏng thuật toán• Quy trình thiết kế nhiệm vụ mô phỏng thuật toánChương 3: Chương trình ứng dụng thuật toán sắp xếp Phân tích và thiết kế hệ thống mô phỏng thuật toán sắp xếp• Phân tích một số thuật toán hiện tạiSinh viên thực hiện:Nguyễn Hải Nam 5 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpChương 1. MỘT SỐ KIẾN THỨC CƠ SỞThuật toánKhái niệm thuật toánThuật ngữ “algorithm” (thuật toán hoặc còn gọi là giải thuật) được gọi theo tên nhà toán học Ả rập thế kỷ IX al-Khowarizmi, người đã viết cuốn sách về các chữ số Hindu – cơ sở của kí hiệu số thập phân hiện đại (xem [4], trang 118). Xuất xứ ban đầu là từ algorism, được dùng để chỉ các quy tắc thực hiện các phép tính số học trên các số thập phân. Sau đó, vào thế kỷ XVIII algorism biến thành algorithm. Với sự quan tâm ngày càng tăng đối với máy tính, khái niệm thuật toán đã được cho một ý nghĩa chung hơn, bao hàm cả các thủ tục xác định để giải các bài toán, chứ không phải chỉ là thủ tục để thực hiện các phép tính số học. Thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy các thao tác ấy, từ Input của bài toán ta nhận được Output cần tìm.Cũng có thế xem thuật toán như một công cụ để giải quyết một bài toán cụ thể. Phát biểu bài toán sẽ chỉ định tổng quát mối quan hệ Input/Output cần thiết. Thuật toán mô tả một thủ tục tính toán cụ thể để đạt được mối quan hệ Input/Output đó. Vào khoảng những năm 1930 - 1936, lần lượt các nhà toán học K.Gödel, S. Kleene, A. Church, A. Turing đã đề ra một số định nghĩa khác nhau cho Sinh viên thực hiện:Nguyễn Hải Nam 6 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpkhái niệm thuật toán. Trong số các định nghĩa toán học khác nhau (nhưng tương đương) về thuật toán, các khái niệm Máy Turing (1937) và Hàm đệ quy (1931-1936) được sử dụng rộng rãi hơn vì có nhiều thuận tiện cho các nghiên cứu cả về lí thuyết lẫn thực hành. Các đặc trưng của thuật toánCác thuật toán có một số tính chất chung, đó là:• Đầu vào (Input): Một thuật toán có các giá trị đầu vào từ một tập xác định.• Đầu ra (Output): Từ mỗi tập giá trị đầu vào, thuật toán sẽ tạo ra các giá trị đầu ra. Các giá trị đầu ra chính là nghiệm của bài toán.• Tính xác định: Các bước của thuật toán phải được xác định một cách chính xác.• Tính đúng đắn: Một thuật toán phải cho các giá trị đầu ra đúng đối với mỗi tập giá trị đầu vào.• Tính hữu hạn: Một thuật toán phải tạo ra các giá trị đầu ra sau một số hữu hạn (có thể rất lớn) các bước thực hiện đối với mỗi tập đầu vào.• Tính hiệu quả: Mỗi bước của thuật toán phải thực hiện được một cách chính xác và trong một khoảng thời gian chấp nhận được.Sinh viên thực hiện:Nguyễn Hải Nam 7 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếp• Tính tổng quát: Thuật toán cần phải áp dụng được cho mọi tập dữ liệu đầu vào của bài toán, chứ không phải chỉ cho một tập đặc biệt các giá trị đầu vào.1.2.Độ phức tạp của thuật toán Cần chú ý rằng mỗi thuật toán chỉ giải một lớp bài toán nào đó, nhưng có thể có nhiều thuật toán khác nhau giải cùng một bài toán. Một vấn đề đặt ra là ta cần chọn một thuật toán tốt để giải bài toán đã cho.Nhưng thế nào là thuật toán tốt? Thước đo hiệu quả là thời gian máy tính sử dụng để giải bài toán theo thuật toán đang xét khi các giá trị đầu vào có kích thước xác định, và dung lượng bộ nhớ đòi hỏi để thực hiện thuật toán đó. Như vậy khi xem xét đến độ phức tạp tính toán của thuật toán ta phải xem xét đến độ phức tạp thời gian và độ phức tạp không gian. Độ phức tạp không gian gắn liền với cấu trúc dữ liệu cụ thể được dùng để thực hiện thuật toán.Độ phức tạp thời gian:Độ phức tạp thời gian của một thuật toán có thể biểu diễn qua số phép toán thực hiện thuật toán đó khi các giá trị đầu vào có kích thước xác định. Độ phức tạp trong trường hợp xấu nhất là trường hợp phải dùng tối đa các phép toán để giải bài toán theo thuật toán đang xét.Độ phức tạp trong trường hợp trung bình, trong trường hợp này ta phải đi tìm số trung bình các phép toán để giải bài toán trên toàn bộ các 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 của thuật toán:O(1): Độ phức tạp hằng sốSinh viên thực hiện:Nguyễn Hải Nam 8 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpO(logn): Độ phức tạp lôgaritO(n): Độ phức tạp tuyến tínhO(nlogn): Độ phức tạp nlognO(nb): Độ phức tạp đa thứcO(bn), b > 1: Độ phức tạp hàm mũO(n!): Độ phức tạp giai thừaSinh viên thực hiện:Nguyễn Hải Nam 9 Nghiên cứu khoa học Mô phỏng thuật toán sắp xếpChương 2. MÔ PHỎNG THUẬT TOÁNTổng quan về mô phỏng thuật toánKhái niệm mô phỏng thuật toánMô phỏng thuật toán là quá trình tách dữ liệu, thao tác, ngữ nghĩa và tạo mô phỏng đồ họa cho quá trình trên [Stasko 1990] (xem [23]). Mô phỏng thuật toán được thiết kế để giúp người dùng có thể hiểu thuật toán, đánh giá chương trình và sửa lỗi chương trình.Một chương trình máy tính chứa các cấu trúc dữ liệu của thuật toán mà nó thực thi. Trong quá trình thực thi chương trình, các giá trị trong cơ sở dữ liệu được thay đổi. Mô phỏng thuật toán sử dụng biểu diễn đồ họa để biểu diễn cấu trúc dữ liệu và chỉ ra sự thay đổi giá trị trong cơ sở dữ liệu trong mỗi trạng thái. Thông qua đó, người sử dụng có thể xem được từng bước thực thi chương trình và nhờ vậy có thể hiểu chi tiết được thuật toán.Mô phỏng thuật toán cũng được dùng để đánh giá một chương trình đã có bằng cách cung cấp các mô phỏng cho các thành phần của hệ thống, nhờ đó có thể kiểm tra được hiệu năng của hệ thống.Bên cạnh việc giúp người sử dụng hiểu hơn về hệ thống, mô phỏng thuật toán còn được dùng để giúp thực hiện quá trình dò lỗi dễ dàng hơn. Để sử dụng mô phỏng thuật toán trong quá trình dò lỗi của một chương trình, người sử dụng chú thích vào các trạng thái của chương trình để tạo ra các lệnh mô phỏng, sau đó chúng sẽ được đưa vào hệ thống mô phỏng thuật toán để tạo mô phỏng. Người sử dụng có thể xem chương trình của họ đã thực hiện như thế nào, các giá trị dữ liệu ở mỗi bước và một bước sẽ ảnh hưởng Sinh viên thực hiện:Nguyễn Hải Nam 10 [...]... xuyên cần đến sắp xếp, nhiều thuật toán được thiết kế dựa trên ý tưởng xử lý các đối tượng theo một thứ tự xác định. Các thuật toán sắp xếp được chia làm 2 loại: sắp xếp trong và sắp xếp ngoài. Sắp xếp trong được thực hiện khi mà các đối tượng cần sắp xếp được lưu ở bộ nhớ trong của máy tính dưới dạng mảng. Do đó sắp xếp trong cịn được gọi là sắp xếp mảng. Khi các đối tượng cần sắp xếp quá lớn cần... tốn sắp xếp { keyType key; // Khoá sắp xếp // Các trường dữ liệu khác }; Vấn đề sắp xếp bây giờ được phát biểu chính xác như sau. Cho mảng A[0 n-1] chứa n Item, chúng ta cần sắp xếp lại các thành phần của mảng A sao cho: A[0].key <= A[1].key <= <= A[n-1].key 3.1 CÁC THUẬT TỐN SẮP XẾP ĐƠN GIẢN Mục này trình bày các thuật toán sắp xếp đơn giản: sắp xếp lựa chọn (selection sort), sắp xếp. .. khoa học Mơ phỏng thuật tốn sắp xếp Thuật toán về sắp xếp rất đa dạng và phong phú. Vì vậy vấn đề “ Mơ phỏng thuật tốn sắp xếp ” được chọn để nghiên cứu trong khóa luận này. 2. Mục tiêu và nhiệm vụ • Nghiên cứu tổng quan về mơ phỏng thuật tốn. • Hướng đến các kỹ thuật lập trình với mã nguồn mở và ngơn ngữ lập trình C# • Áp dụng kết quả nghiên cứu làm một demo mơ phỏng thuật tốn sắp xếp 3. Cấu trúc... sở • Trình bày khái niệm thuật toán, các đặc trưng của thuật tốn • Độ phức tạp của thuật tốn Chương 2: Mơ phỏng thuật tốn • Tổng quan về mơ phỏng thuật tốn • Một số u cầu đối với mơ phỏng thuật tốn • Quy trình thiết kế nhiệm vụ mơ phỏng thuật tốn Chương 3: Chương trình ứng dụng thuật tốn sắp xếp Phân tích và thiết kế hệ thống mơ phỏng thuật tốn sắp xếp • Phân tích một số thuật tốn hiện tại Sinh viên... phỏng thuật tốn sắp xếp 3.2 SẮP XẾP HỒ NHẬP Thuật tốn sắp xếp hồ nhập (MergeSort) là một thuật toán được thết kế bằng kỹ thuật chia - để - trị. Giả sử ta cần sắp xếp mảng A[a b], trong đó a, b là các số nguyên không âm, a b, a là chỉ số đầu và b là chỉ số cuối của mảng. Ta chia mảng thành hai mảng con bởi chỉ số c nằm giữa a và b ( c = ( a + b ) / 2). Các mảng con A[a c] và A[c+1…b] được sắp xếp. .. phỏng thuật tốn sắp xếp • Tính tổng qt: Thuật tốn cần phải áp dụng được cho mọi tập dữ liệu đầu vào của bài toán, chứ không phải chỉ cho một tập đặc biệt các giá trị đầu vào. 1.2.Độ phức tạp của thuật toán Cần chú ý rằng mỗi thuật toán chỉ giải một lớp bài tốn nào đó, nhưng có thể có nhiều thuật toán khác nhau giải cùng một bài toán. Một vấn đề đặt ra là ta cần chọn một thuật toán tốt để giải bài toán. .. dạng file, ta cần sử dụng các phương pháp sắp xếp ngồi, hay cịn gọi là sắp xếp file. Trong chương này, chúng ta trình bày các thuật tốn sắp xếp đơn giản, các thuật tốn này dịi hỏi thời gian O(n 2 ) để sắp xếp mảng n đối tượng. Sau đó chúng ta đưa ra các thuật toán phức tạp và tinh vi hơn, nhưng hiệu quả hơn, chỉ cần thời gian O(nlogn). Mảng cần được sắp xếp có thể là mảng số nguyên, mảng các số... TRÌNH ỨNG DỤNG THUẬT TỐN SẮP XẾP Sắp xếp là một quá trình biến đổi một danh sách các đối tượng thành một danh sách thoả mãn một thứ tự xác định nào đó. Sắp xếp đóng vai trị quan trọng trong tìm kiếm dữ liệu. Chẳng hạn, nếu danh sách đã được sắp xếp theo thứ tự tăng dần (hoặc giảm dần), ta có thể sử dụng kỹ thuật tìm kiếm nhị phân hiệu quả hơn nhiều tìm kiếm tuần tự… Trong thiết kế thuật tốn, ta... thực hiện các phép toán trong mỗi lần lặp ở hàm Merge là hằng số d nào đó, ta có : Sinh viên thực hiện:Nguyễn Hải Nam 37 Nghiên cứu khoa học Mơ phỏng thuật tốn sắp xếp Chương 1. MỘT SỐ KIẾN THỨC CƠ SỞ Thuật toán Khái niệm thuật tốn Thuật ngữ “algorithm” (thuật tốn hoặc cịn gọi là giải thuật) được gọi theo tên nhà toán học Ả rập thế kỷ IX al-Khowarizmi, người đã viết cuốn sách về các chữ số Hindu... hiện:Nguyễn Hải Nam 7 Nghiên cứu khoa học Mơ phỏng thuật tốn sắp xếp Một thuật tốn được mơ phỏng phải đảm bảo là thuật toán tốt, dễ hiểu và đúng đắn. Muốn vậy ta phải thử nghiệm trong các trường hợp dữ liệu ngẫu nhiên, tốt nhất, xấu nhất. Nếu thuật toán vẫn chạy tốt và trong một thời gian cho phép thì thuật tốn mới hiệu quả. Ta khơng thể chấp nhận một thuật toán đúng mà thời gian chạy quá lớn. Phải tạo . Mô phỏng thuật toán sắp xếpThuật toán về sắp xếp rất đa dạng và phong phú. Vì vậy vấn đề “ Mô phỏng thuật toán sắp xếp ” được chọn để nghiên. Mô phỏng thuật toán sắp xếpChương 2. MÔ PHỎNG THUẬT TOÁNTổng quan về mô phỏng thuật toánKhái niệm mô phỏng thuật toánMô phỏng thuật toán là quá trình

Ngày đăng: 12/09/2012, 16:20

Từ khóa liên quan

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

Tài liệu liên quan