nghiên cứu các thuật toán sắp xếp

36 2.1K 16
nghiên cứu các 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

nghiên cứu các thuật toán sắp xếp

Đồ án học phần MỤC LỤC LỜI MỞ ĐẦU A.VẤN ĐỀ, MỤC ĐÍCH VÀ PHẠM VI NGHIÊN CỨU CỦA ĐỀ TÀI B TÌM HIỂU VỀ BÀI TOÁN SẮP XẾP C NỘI DUNG CỦA CÁC PHƯƠNG PHÁP SẮP XẾP I Phương pháp chọn trực tiếp (Selection sort): .7 Giải thuật: .7 Đánh giá giải thuật: Lưu đồ thuật toán : II Phương pháp chèn trực tiếp (Insert sort): 10 Giải thuật: 10 Đánh giá giải thuật : .11 Lưu đồ thuật toán: 12 Xem dãy số cần xếp nhập vào sẵn: .12 III Phương pháp xếp bọt (Bubble sort): 13 Giải thuật : 13 Dãy xếp xong : 12 15 15 Đánh giá giải thuật : .15  Nhận xét: .15 IV Phương pháp xếp vun đống (Heap sort): 17 Định nghĩa heap : .17 Giải thuật Heapsort: 17 Đánh giá giải thuật : .20 V Phương pháp xếp nhanh (Quick sort): 22 Giải thuật : 22 Đánh giá giải thuật : .24 Lưu đồ thuật toán : .25 Xem dãy số cần xếp nhập vào sẵn 25 VI Phương pháp xếp trộn (MergerSort): 26 Đánh giá giải thuật: 28 Lưu đồ thuật toán: 28 D KẾT LUẬN .31 32 32 - Sau nhấn Enter để vào menu chương trình để ta lựa chọn phương pháp xếp để lựa chọn phương pháp xếp ta sử dụng phím mũi tên lên xuống Minh họa hình giao diện xuất sau: .32 33 33 - Tiếp tục nhấn Enter hình quay lại hình chương trình Demo1 ban đầu 34 Đồ án học phầ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(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 toán tìm kiếm, thuật toá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 toá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 toá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 thuật toán xếp thông dụng nội dung mà em nghiên cứu đồ án học phần là: Phương pháp chọn trực tiếp (Selection sort); Phương pháp chèn trực tiếp( Insertion sort); Phương pháp xếp bọt( Bubble sort); Đồ án học phần 4.Phương pháp xếp trộn ( Merge sort); 5.Phương pháp xếp nhanh ( Quick sort); Phương pháp xếp kiểu vun đống ( Heap sort); Ngoài có nhiều thuật toán xếp khác như: Phương pháp xếp cải tiến ( Shellsort) Trong tập chủ đề lớn tìm hiểu khảo sát thuật toán Các thuật toán Selection sort, Insertion sort, Bubble sort thuật toán đơn giản dễ cài đặt chi phí cao Các thuật toán Merge sort, Quick sort, Heap sort, phức tạp hiệu suất cao nhóm thuật toán đầu Các nhóm thuật toá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 Mặt dù nhóm em cố gắng nổ lực để làm đồ án học phầ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 niềm vui lớn em, em biết ơn Cô Ngô Thị Lan hướng dẫn em tận tình suốt thời gian em làm đồ án Một lần em xin gửi lời cám ơn chân thành đến Cô Xuân Khanh, Ngày 01 Tháng 01 Năm 2015 Đồ án học phần A VẤN ĐỀ, MỤC ĐÍCH VÀ PHẠM VI NGHIÊN CỨU CỦA ĐỀ TÀI I Nêu vấn đề : Quá trình xếp 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ữ lập trình Pascal ,với yê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 chúng 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 chúng 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 toán đặt cách có hiệu mục đích mà nhóm chúng em chọn đề tài xếp để nghiên cứu II Phạm vi nghiên cứu đề tài : Tìm hiểu vận dụng lý thuyết số phương pháp xếp phương pháp chọn trực tiếp (Selectsort), chèn trực tiếp (Insertsort), xếp bọt (Bubblesort), xếp kiểu vun đống (Heapsort), xếp nhanh (Quicksort), xếp trộn (Mergesort), để 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 toán xếp vừa nêu III Mục tiêu đề tài cần đạt được: Đối với báo cáo : - Mô tả trình thực tất phương pháp xếp - Tính độ phức tạp phương pháp - Thể tất giao diện Demo - Mô tả chức Demo Đồ án học phần 2 Đối với Demo : - Thiết kế giao diện hài hoà rõ ràng Có sử dụng đồ hoạ - Demo phải có liệu mẫu để test có chức nhập liệu để kiểm tra thủ công B TÌM HIỂU VỀ BÀI TOÁN SẮP XẾP I Định nghĩa toán xếp: Khái niệm xếp: Sắp xếp trình xử lý danh sách phần tử (hoặc mẫu tin) để đặt chúng theo thứ tự thỏa mãn tiêu chuẩn dựa nội dung thông tin lưu giữ phần tử Tại cần phải xếp phần tử thay để dạng tự nhiên (chưa có thứ tự vốn có? Ví dụ toán tìm kiếm với phương pháp tìm kiếm nhị phân để trả lời câu hỏi Khi khảo sát toán xếp, ta phải làm việc nhiều với khái niệm gọi nghịch 2:Khái niệm nghịch : Xét mảng số a 0,a1, …, an Nếu có i < j a i > aj, ta gọi nghịch Ví dụ : Mảng chưa xếp có nghịch Mảng có thứ tự không chứa nghịch Khi a phấn tử nhỏ rối đến a1, a2 Như vậy, để xếp mảng, ta tìm cách giảm số nghịch mảng cách hoán vị cặp phần tử a i, aj có i < j > aj theo quy luật Cho trước dãy số a1,a2, …, an lưu trữ cấu trúc liệu mảng A : array [1 100] of integer; Sắp xếp dãy số a1,a2, …, an thực việc bố trí lại phần tử cho hình thành dãy ak1, ak2, …, akn có thứ tự (giả sử xét thứ tự tăng) nghĩa a ki > aki-1 Mà để định tình cần thay đổi vị trí phần tử dãy, cần dựa vào kết loạt phép so sánh Chính vậy, hai thao tác so sánh gán thao tác hầu hết thuật toán xếp Đồ án học phần 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 Đối với dãy số lưu trữ nhớ chính, nhu cầu tiết kiệm nhớ đặt nặng, thuật toán xếp đòi hỏi cấp phát thêm vùng nhớ để lưu trữ dãy kết vùng nhớ lưu trữ dãy số ban đầu thường quan tâm Thay vào đó, thuật toán xếp trực tiếp dãy số ban đầu – gọi thuật toán xếp chổ - lại đầu tư phát triển Phần giới thiệu số giải thuật xếp từ đơn giản đến phức tạp áp dụng thích hợp cho việc xếp nội Đồ án học phần C NỘI DUNG CỦA CÁC PHƯƠNG PHÁP SẮP XẾP I Phương pháp chọn trực tiếp (Selection sort): Giải thuật: - Phương pháp xếp chọn trực tiếp - selection sort phương pháp xếp cách chọn phần tử nhỏ xếp vào vị trí thứ nhất, tương tự phần tử nhỏ xếp vào vị trí hết số phầm tử dãy.Ta thấy rằng, mảng có thứ tự, phần tử a i min(ai, ai+1, , an-1) Ý tưởng thuật toán chọn trực tiếp mô cách xếp tự nhiên thực tế: chọn phần tử nhỏ n phần tử ban đầu, đưa phần tử vị trí đầu dãy hành; sau không quan tâm đến nữa, xem dãy hành n – phần tử dãy ban đầu, vị trí thứ hai; lặp lại trình cho dãy hành … đến dãy hành phần tử Dãy ban đầu n phần tử, tóm tắt ý tưởng thuật toán thực n-1 lượt việc đưa phần tử nhỏ dãy hành vị trí đầu dãy - Các bước tiến hành sau : + Bước 1: Gán i (i:=1,bắt đầu từ phần tử dãy); + Bước 2: Tìm phần tử a[min] nhỏ dãy tiến hành từ a[i] đến a[n] + Bước 3: Hoán vị a[min] a[i] + Bước 4: Nếu i < n-1 i := i + 1; Lặp lại Bước Ngược lại: Dừng.( n-1 phần tử nằm vị trí ) - Ví dụ : Cho dãy số a : 12 15 12 I=1 15 Đồ án học phần 2 12 15 12 15 12 15 12 15 12 15 12 15 I=2 I=3 I=4 I=5 I=6 I=7 Đồ án học phần 2 Đánh giá giải thuật: - Đối với giải thuật chọn trực tiếp, thấy lượt thứ i, cần ( n-1) lần so sánh để xác định phần tử nhỏ hành Số lượng phép so sánh không phụ thuộc vào tình trạng dãy số ban đầu, trường hợp kết luận : n −1 Số lần so sánh = ∑ (n − i ) = i =1 n(n − 1) - Số lần hoán vị ( hoán vị phép gán ) lại phụ thuộc vào tình trạng ban đầu dãy số, ta ước lược trường hợp sau: Trường hợp Tốt Xấu Lưu đồ thuật toán : Begin Số phép gán 3n(n-1)/2 i = Số lần so sánh n(n-1)/2 n(n-1)/2 Sai sẵn Xem dãy số cần xếp nhập vào i= i+1 Đúng Sai a[j] x , với k = j n ak < x ak = x ak > x Trong đó, dãy thứ có thứ tự, dãy có phần tử chúng có thứ tự, dãy ban đầu Ngược lại, dãy có nhiều phần tử dãy ban đầu có thứ tự dãy Để xếp dãy 3, ta tiến hành việc phân hoạch dãy theo phương pháp phân hoạch dãy ban đầu vừa trình bày 22 Đồ án học phần Giải thuật phân hoạch dãy al, al+1, , ar thành hai dãy : Bước 1: Chọn tùy ý phần tử a[k] dãy giá trị mốc, l < k < r: x : = a[k]; i:=l; j : = r ; Bước 2: Phát hiệu chỉnh cặp phần tử a[i], a[j] nằm sai chỗ : Bước 2a: Trong (a[i] < x) i : = i+1; Bước 2b: Trong (a[j] > x) j : = j-1; Bước 2c: Nếu i < j // a[i] > x > a[j] mà a[j] đứng sau a[i] hoán vị (a[i], a[j]); Bước 3: Nếu i < j : Lặp lại bước // chưa xét hết mảng Nếu i > j : Dừng Giải thuật phân hoạch dãy xếp dãy al , al+1, …, ar : Có thể phát biểu giải thuật xếp cách đệ quy sau : Bước 1: Phân hoạch dãy a1 ar thành dãy : Dãy : a1 aj x Bước 2: Nếu (l < j) // dãy có nhiều phần tử Phân hoạch dãy a1 aj Nếu (i < r) // dãy có nhiều phần tử Phân hoạch dãy ar Ví dụ : Cho dãy số a : 12 15 Phân hoạch đoạn l =1, r = 8, x =A[4]=5 12 r=8 l=1 15 23 12 15 Đồ án học phần Phân hoạch đoạn l =1, r = 3, x =A[2]=2 l=1 1 12 15 r=3 12 15 12 15 Phân hoạch đoạn l =5, r = 8, x =A[6]=6 l=5 r=8 12 15 12 15 l=7 r=8 12 15 Phân hoạch đoạn l =7, r = 8, x =A[7]=6 1 2 4 5 6 Dừng Đánh giá giải thuật : Hiệu thực giải thuật Quicksort phụ thuộc vào việc chọn giá trị mốc Trường hợp tốt xảy lần phân hoạch chọn phần tử median (phần tử lớn (hay bằng) số phần tử, nhỏ (hay bằng) số phần tử lại) làm mốc, dãy phân chia thành hai phần cần log 2n lần phân hoạch xếp xong Nhưng lần phân hoạch lại chọn nhằnm phần tử có giá trị cực 24 Đồ án học phần đại (hay cực tiểu) mốc, dãy bị phân chia thành hai phần không : phần có phần tử, phần lại gồm (n-1) phần tử, cần phân hoạch n lần xếp xong  Ta có bảng tổng kết sau: Trường hợp Tốt Trung bình Xấu Begi n x = a[(l+r)/2]; i = l; j = r; Độ phức tạp n*log(n) n*log(n) n2 Sai a[i]< x Đúng i = i+1; Sai a[j]> x Đúng j = j -1; Lưu đồ thuật toán : Xem dãy số cần xếp nhập vào sẵn Sai i = n Đúng Sai not up Đúng Sai i[...]... Demo còn đơn giản - Do chưa hiểu được sâu tất cả các thuật toán sắp xếp - Chưa biểu diễn được quá trình sắp xếp của các phần tử trong dãy số trong đồ họa,chưa tính được số lần so sánh và hoán vị của các phần tử trong quá trình sắp xếp * Bài học kinh nghiệm cần rút ra: - Cần phải nghiên cứu kỉ và tìm hiểu nhiều hơn nữa về các phương pháp sắp xếp, tìm hiểu các ngôn ngữ lập trình để có thể lựa chọn cho mình... án học phần 2 này em đã tìm hiểu nghiên cứu và cài đặt được 6 phương pháp sắp xếp đó là: Phương pháp chọn trực tiếp (Selection sort); Phương pháp chèn trực tiếp ( Insertion sort); Phương pháp sắp xếp nổi bọt ( Bubble sort); Phương pháp sắp xếp trộn (Merge sort);Phương pháp sắp xếp nhanh (Quick sort);Phương pháp sắp xếp kiểu vun đống( Heap sort);Thực hiện được việc sắp xếp dãy số đã cho tùy ý ban đầu... giảm (12); (2,8); (1,6); (4,5) Dãy đã có thứ tự coi như có một dãy con Như vậy, một cách tiếp cận để sắp xếp dãy là tìm cách làm giảm dãy con không giảm của nó Đây chính là hướng tiếp cận của thuật toán sắp xếp theo phương pháp trộn - Trong phương pháp MergeSort, mấu chốt của vấn đề là cách phân hoạch dãy ban đầu thành các dãy con Sau khi phân hoạch xong, dãy ban đầu sẽ tách ra thành 2 dãy phụ theo nguyên... được sắp xếp 1 Giải thuật: - Giải thuật trộn trực tiếp là phương pháp đơn giản nhất Việc phân hoạch thành các dãy con đơn giản chỉ là tách dãy n phẩn tử thành n dãy con Đòi hỏi của thuật toán về tính có thứ tự của các dãy con luôn được thõa trong cach1 phân hoạch này vì dãy gồm một phần tử luôn có thứ tự Cứ mỗi lần tách rồi trộn, chiều dài của các dãy con sẽ được nhân đôi 26 Đồ án học phần 2 - Các bước... Enter để vào menu chương trình chính để ta lựa chọn các phương pháp sắp xếp và để lựa chọn các phương pháp sắp xếp ta sử dụng 2 phím mũi tên lên hoặc là xuống Minh họa màn hình giao diện xuất hiện như sau: 32 Đồ án học phần 2 - Sau khi dãy số đã được sắp xếp, bạn nhấn Enter thì chương trình sẽ quay lại vào menu chính và bạn có thể thực hiện thao tác sắp xếp khác tương tự như trên Nếu bạn muốn thoát thì... mà a[j] đứng sau a[i] thì hoán vị (a[i], a[j]); Bước 3: Nếu i < j : Lặp lại bước 2 // chưa xét hết mảng Nếu i > j : Dừng Giải thuật phân hoạch dãy sắp xếp dãy al , al+1, …, ar : Có thể phát biểu giải thuật sắp xếp một cách đệ quy như sau : Bước 1: Phân hoạch dãy a1 ar thành các dãy con : Dãy con 1 : a1 aj x Bước 2: Nếu (l < j) // dãy con 1 có nhiều hơn... Đúng l n-1 thì dừng và dãy đã được sắp xếp xong Dãy khi sắp xếp xong là : 1 2 4 5 6 8 12 15 2 Đánh giá giải thuật : Đối với giải thuật nổi bọt, số lượng các phép so sánh xảy ra không phụ thuộc vào tình trạng của dãy số ban đầu, nhưng số lượng phép toán hoán vị thực hiện tuỳ thuộc vào kết quả so sánh, có thể ước lượt trong từng trường hợp như... 2 Đánh giá giải thuật: Ta thấy rằng số lần lặp của bước 2 và bước 3 trong thuật toán MergeSort bằng log2n do sau mỗi lần lặp giá trị của k tăng lên gấp đôi Dễ thấy, chi phí thực hiện bước 2 và bước 3 tỉ lệ thuận với n Như vậy, chi phí thực hiện của giải thuật MergeSort sẽ là O(nlog2n) Do không sử dụng thông tin nào về đặc tính của dãy cần sắp xếp, nên trong mọi trường hợp của thuật toán chi phí là ... Trong tập chủ đề lớn tìm hiểu khảo sát thuật toán Các thuật toán Selection sort, Insertion sort, Bubble sort thuật toán đơn giản dễ cài đặt chi phí cao Các thuật toán Merge sort, Quick sort, Heap... hiệu suất cao nhóm thuật toán đầu Các nhóm thuật toá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... sánh gán thao tác hầu hết thuật toán xếp Đồ án học phần 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 Đối với dãy số lưu trữ

Ngày đăng: 28/10/2015, 14:49

Từ khóa liên quan

Mục lục

  • I. Phương pháp chọn trực tiếp (Selection sort):

    • 1. Giải thuật:

    • 2. Đánh giá giải thuật:

    • 3. Lưu đồ thuật toán :

    • II. Phương pháp chèn trực tiếp (Insert sort):

      • 1. Giải thuật:

      • 2. Đánh giá giải thuật :

      • 3. Lưu đồ thuật toán:

      • Xem như dãy số cần sắp xếp đã được nhập vào sẵn:

      • III. Phương pháp sắp xếp nổi bọt (Bubble sort):

        • 1. Giải thuật :

        • Dãy khi sắp xếp xong là : 1 2 4 5 6 8 12 15

        • 2. Đánh giá giải thuật :

        •  Nhận xét:

        • IV. Phương pháp sắp xếp vun đống (Heap sort):

          • 1. Định nghĩa heap :

          • 2. Giải thuật Heapsort:

          • 3. Đánh giá giải thuật :

          • V. Phương pháp sắp xếp nhanh (Quick sort):

            • 1. Giải thuật :

            • 2. Đánh giá giải thuật :

            • 3. Lưu đồ thuật toán :

            • Xem như dãy số cần sắp xếp đã được nhập vào sẵn

            • VI. Phương pháp sắp xếp trộn (MergerSort):

              • 2. Đánh giá giải thuật:

              • 3. Lưu đồ thuật toán:

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

Tài liệu liên quan