PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT : CÁC GIẢI THUẬT SẮP XẾP, GIẢI THUẬT TÌM KIẾM NHỊ PHÂN, GIẢI THUẬT THAM LAM , Insertion Sort , Selection Sort , Merge Sort , Quick Sort , Giải bài toán ATM sử dụng giải thuật tham lam

22 1.1K 7
PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT : CÁC GIẢI THUẬT SẮP XẾP, GIẢI THUẬT TÌM KIẾM NHỊ PHÂN, GIẢI THUẬT THAM LAM , Insertion Sort , Selection Sort , Merge Sort , Quick Sort , Giải bài toán ATM sử dụng giải thuật tham lam

Đ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

PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT : CÁC GIẢI THUẬT SẮP XẾP, GIẢI THUẬT TÌM KIẾM NHỊ PHÂN, GIẢI THUẬT THAM LAM , Insertion Sort , Selection Sort , Merge Sort , Quick Sort , Giải bài toán ATM sử dụng giải thuật tham lam

Mục lục BÁO CÁO BÀI TẬP LỚN Môn : PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT I I CÁC GIẢI THUẬT SẮP XẾP 1.Insertion Sort : Ý tưởng thuận tốn : Giả sử ta có trước dãy số theo thứ tự tăng dần, sau ta muốn chèn thêm phần tử vào dãy việc cần làm tìm vị trí thích hợp cho phần tử để dãy giữ thứ tự ban đầu - Do dãy số tăng dần, nên để tìm vị trí ta cần duyệt qua phần tử dãy từ cuối đến đầu, gặp phần tử A[i] nhỏ phần tử x cần chèn chèn x vào sau A[i], dãy số A giữ thứ tự tăng dần Vậy với dãy số đầu vào A[1 n] khơng theo thứ tự, ta xem A[1] dãy có thứ tự (do có phần tử), ta tìm vị trí để chèn A[2] vào, sau ta dãy A[1 2] có thứ tự Lặp lại bước tương tự A[1 n] có thứ tự • Các bước thực hiện: - Bước 1: i = (xem A[1] dãy số có thứ có phần tử) - Bước 2: temp = A[i] (phải lưu A[i] biến tạm lúc hốn đổi vị trí làm giá trị A[i]) - Bước 3: j = i – - Bước 4: Xét từ j 1, tìm vị trí thích hợp để chèn temp vào mãng A o Nếu A[j] > temp A[j+i] = A[j] Nếu j > j = j – 1; Lặp lại bước Ngược lại, A[j] = temp; o Ngược lại: A[j+1] = temp; - Bước 5: Nếu i < n i = i + 1; Quay lại bước 2; Ngược lại ta có mảng A[1 n] theo thứ tự tăng dần • Cài đặt thuật tốn : Ngơn ngữ Java • Đánh giá độ phức tạp giải thuật : Độ phức tạp giải thuật O(n2) 2.Selection Sort: Ý tưởng thuật toán : Đây thuật toán tự nhiên nhất, dễ hiểu dễ tưởng thuật toán sau: thực Tư + Chọn phần tử nhỏ n phần tử ban đầu, vị trí dãy hành đưa phần tử +Sau khơng quan tâm đến nữa, xem dãy cịn n-1 phần tử cịn lại, vị trí thứ hành +Lặp lại trình cho dãy hành đến phần tử dãy hành +Dãy ban đầu có n phần tử, tóm tắt ý tưởng thực n-1 lượt việc đưa phần tử nhỏ dãy trí đầu dãy thuật toán hành vị Các bước thực hiện: - Bước 1: i = - Bước 2: Tìm phần tử nhỏ A[min] dãy hành từ A[i] đến A[n] - Bước 3: Hoán vị A[min] A[i] - Bước 4: i = i + - Bước 5: Nếu i < n quay lại bước (i = n tức mãng phần tử) • Cài đặt thuật tốn : Ngơn ngữ Java • Đánh giá độ phức tạp : Độ phức tạp là: O (n2) 3.Merge Sort : • Ý tưởng thuật toán : Merge Sort thuật toán xếp để xếp danh sách (hoặc cấu trúc liệu truy cập tuần tự, v.d luồng tập tin) theo trật tự Thuật tốn ví dụ tương đối điển hình lối thuật tốn chia để trị Các bước thực thuật tốn sau: • Bước : // Chuẩn bị k = 1; // k chiều dài dãy bước hành • Bước : 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 : 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 • Cài đặt thuật tốn : Ngơn ngữ Java • Đánh giá độ phức tạp : Ta thấy số lần lặp bước bước thuật toán MergeSort log 2n 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 bới n Như vậy, chi phí thực giải thuật MergeSort O(nlog 2n) 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 tốn 4.Quick Sort : • Ý tưởng thuật toán : Đây giả thuật xếp nhanh, tốn O(nlogn) Cài đặt giả thuật tương đối phức tạp Chúng ta cần ý đến: - Pivot: ta gọi chốt - Partition: Gọi điểm phân hoạch + Đối với giải thuật này, phần tử hay mảng có tất phần mảng có thứ tự xem mảng tử giống + Ta chi mảng thành mảng phải con: + Sắp xếp mảng con, mảng phần tử +Nếu mảng Trái có thứ tự có thứ tự mảng tự mảng phải mảng có thứ Trái A = {59, 31, 12, 33, 27, 97, 91, 19, 18, 63 } Bước 1: Tìm chốt: Chốt phần tử lớn phần tử khác mảng Nếu mảng có phần tử tất phần tử khơng có chốt: Chốt mảng la 59 (vị trí 0) VD: + 1, 1, 5, 3, -> chốt + 5, 5, 5, 3, 1, 2, -> chốt + -> chốt + 7, 7, 7, -> khơng có chốt - Bước 2: Tìm điểm phân hoạch: + Dùng cờ: L (trái) R (Phải) + L chạy từ trái qua, dừng lại gặp phần tử >= pivot + R chạy từ phải qua, dừng lại gặp phần tử < pivot + Tại điểm dùng: Nếu L < R : Chúng ta swap A[L] A[R] + Dừng lại L > R + Partition L Đây số mảng bên phải VD: với mảng A = {59, 31, 12, 33, 27, 97, 91, 19, 18, 63 } PivotLey = 59 L = 0, R = 9: b1 L dừng lại vị trí 0: A[L] >= pivot, R dừng lại vị trí 8, A[R] = 18 < pivot Swap: 18, 31, 12, 33, 27, 97, 91, 19, 59, 63 b2, tiếp tục L > R - Bước 3: Lặp lại (Dùng đệ qui) • Cài đặt thuật tốn : Ngơn ngữ Java • Đánh giá độ phức tạp : Độ phức tạp giải thuật O(nlogn) Là thuật toán xếp nhanh thực tế II GIẢI THUẬT TÌM KIẾM NHỊ PHÂN • Ý tưởng giải thuật tìm kiếm nhị phân : Tìm kiếm nhị phân ( binary search ) thuật toán dùng để tìm kiếm phần tử danh sách xếp ( sorted lists and array ) So sánh phần tử cần tìm với phần tử nằm danh sách để xác định vùng liệu có chứa giá trị cần tìm Nếu phần tử thuật tốn kết thúc Nếu phần tử khơng tùy vào phần tử lớn hơn, thuật toán lặp lại bước so sánh với nửa đầu nửa sau danh sách Vì sau bước tìm kiếm, miền liệu cần xét giảm nửa nên thời gian thực thi thuật tốn hàm logarit Phép tìm kiếm nhị phân thực dãy khố có thứ tự (xét dãy tăng dần): a[0]

Ngày đăng: 07/01/2017, 19:26

Từ khóa liên quan

Mục lục

  • I. I. CÁC GIẢI THUẬT SẮP XẾP

    • 1.Insertion Sort :

      • - Ý tưởng của thuận toán : Giả sử ta có trước một dãy số đã theo thứ tự tăng dần, sau đó ta muốn chèn thêm một phần tử vào dãy thì việc cần làm là tìm một vị trí thích hợp cho phần tử đó để dãy vẫn giữ đúng thứ tự ban đầu.

      • Các bước thực hiện:

      • Cài đặt thuật toán : Ngôn ngữ Java

      • Đánh giá độ phức tạp của giải thuật :

      • 2.Selection Sort:

        • Ý tưởng của thuật toán :

        • Các bước thực hiện:

        • Cài đặt thuật toán : Ngôn ngữ Java

        • Đánh giá độ phức tạp :

        • 3.Merge Sort :

          • Ý tưởng của thuật toán :

          • Các bước thực hiện thuật toán như sau:

          • Cài đặt thuật toán : Ngôn ngữ Java

          • Đánh giá độ phức tạp :

          • 4.Quick Sort :

            • Ý tưởng của thuật toán :

            • Cài đặt thuật toán : Ngôn ngữ Java

            • Đánh giá độ phức tạp :

            • II. GIẢI THUẬT TÌM KIẾM NHỊ PHÂN

              • Ý tưởng của giải thuật tìm kiếm nhị phân :

              • 1.Giải thuật tìm kiếm nhị phân không sử dụng đệ quy :

                • Cài đặt thuật toán : Ngôn ngữ C++

                • Đánh giá độ phức tạp :

                • 2.Giải thuật tìm kiếm nhị phân sử dụng đệ quy :

                  • Cài đặt thuật toán : Ngôn ngữ C++

                  • Đánh giá độ phức tạp :

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

Tài liệu liên quan