Lý thuyết Tin học 11 Bài 26 (Kết nối tri thức): Phương pháp làm mịn dần trong thiết kế chương trình

Tóm tắt lý thuyết Tin học lớp 11 Bài 26: Phương pháp làm mịn dần trong thiết kế chương trình hay, chi tiết sách Kết nối tri thức sẽ giúp học sinh nắm vững kiến thức trọng tâm, ôn luyện để học tốt Tin học 11.

1 1590 lượt xem


Lý thuyết Tin học 11 Bài 26: Phương pháp làm mịn dần trong thiết kế chương trình

A. Lý thuyết Phương pháp làm mịn dần trong thiết kế chương trình

1. Phương pháp thiết kế làm mịn dần

- Bài toán gốc: Cho trước dãy số A: A[0], A[ 1], ..., A[n-1]. Cần tiến hành sắp xếp dãy phải nhận được là trên theo thứ tự tăng dần. Kết quả phải nhận được: A[0] ≤ A[1] ≤ ... ≤ A[n-1]

- Ví dụ với bộ dữ liệu đầu vào là dãy [2, 1,7,10,4] thì kết quả thu được dãy [1,2,4,7,101. Quá trình phân tích, thiết kế được mô tả theo các bước sau.

a) Tìm hiểu bài toán

- Bài toán gốc là cho trước dãy A, cần sắp xếp lại dãy này theo thứ tự tăng dần.

b) Thiết kế chương trình giải bài toán

* Việc thiết kế chương trình giải bài toán được chia thành nhiều bước:

- Bước 1: Thiết lập ý tưởng thiết kế ban đầu.

+ Ý tưởng ban đầu của thuật toán là duyệt từ phần tử thứ hai đến phần tử cuối của dãy để sắp xếp dãy.

+ Sử dụng vòng lặp với biến i chạy từ chỉ số 1 đến n-1.

+ Thực hiện các thao tác để bổ sung A[i] vào dãy các phần tử đã được sắp xếp A[0], A[1]..., A[i-1].

- Bước 2: Thực hiện việc "Chèn A[i] vào đúng vị trí."

+ Lấy phần tử A[i] ra và chuyển các phần tử bên trái A[i] nhưng có giá trị lớn hơn A[i] sang phải.

+ Đặt A[i] vào vị trí trống.

- Bước 3: Nhấc A[i] lên bằng cách tạo biến value để lưu giá trị A[i].

- Bước 4: Chuyển các phần tử bên trái A[i] và lớn hơn A[i] sang phải.

+ Thiết lập biến j = i - 1 là chỉ số của phần tử ngay bên trái A[i].

+ Liên tục so sánh A[j] với value, nếu A[j] > value thì chuyển A[j] sang phải một vị trí bằng lệnh A[j+1] = A[j] và giảm j = j - 1.

+ Quá trình kết thúc khi đi hết bên trái của dãy hoặc A[j] <= value.

- Bước 5: Chèn A[i] vào đúng vị trí trống.

+ Vị trí j+1 là vị trí trống cần chèn.

+ Chèn phần tử A[i] (giá trị được lưu trong value) vào vị trí j+1 bằng câu lệnh A[j+1] = value.

- Quá trình thiết kế kết thúc sau khi chi tiết hoá bằng các câu lệnh tất cả các thao tác được mô tả trong các bước trên.

c) Chương trình hoàn chỉnh

Chương trình giải bài toán đặt ra được thiết kế hoàn chỉnh dưới dạng hàm InsertionSort(A). Tổng hợp các bước trên chúng ta có chương trình hoàn chỉnh như sau:

Lý thuyết Tin học 11 Bài 26 (Kết nối tri thức): Phương pháp làm mịn dần trong thiết kế chương trình (ảnh 1)

 Quá trình thiết kế chương trình sắp xếp chèn đã trải qua nhiều bước, mỗi bước làm mịn dần các phân tích của bước trước đó.

2. Thiết kế chương trình bằng phương pháp làm mịn dần

- Bài toán: Cho trước dãy số A: A[0], A[ 1], ..., A[n-1]. Cặp phần tử A[i], A[j] được gọi là nghịch đảo nếu i < j nhưng A[i] > A[j]. Cần viết chương trình đếm số các cặp nghịch đảo của dãy A. Ví dụ dãy 3, 4, 2, 1 sẽ có 5 cặp nghịch đảo là (3,2), (3, 1), (4,2), (4,1), (2,1). Thiết kế theo phương pháp làm mịn dần

a) Tìm hiểu bài toán 

Bài toán gốc là cho trước dãy số A có n phần tử, cần đếm số các cặp phần tử nghịch đảo của A.

b) Thiết kế chương trình giải bài toán

Chúng ta sẽ thiết kế lời giải bài toán theo phương pháp làm mịn dần.

- Bước 1: Thiết lập ý tưởng thiết kế ban đầu.

+ Bài toán đếm các cặp chỉ số nghịch đảo của dãy A.

+ Chương trình sẽ trả về số lượng các cặp số nghịch đảo.

+ Cần tìm tất cả các cặp chỉ số (i, j) có thể tạo cặp nghịch đảo A[i], A[j], sau đó kiểm tra xem cặp này có là nghịch đảo không.

- Bước 2: Tìm tất cả các cặp chỉ số (ij).

+ Thiết lập 2 vòng lặp theo i, j để tìm.

+ Tìm các chỉ số i chạy từ 0 đến n-2, chỉ số j chạy từ i+1 đến n-1 để tiết kiệm thời gian.

- Bước 3: Kiểm tra tính nghịch đảo của cặp (i)).

+ Cặp (i, j) sẽ là nghịch đảo khi A[i] > A[j].

+ Điều kiện i < j đã được đảm bảo tại bước 2.

c) Chương trình hoàn chỉnh

Trên cơ sở các phân tích trên chúng ta có thể thiết lập hàm Nghichdao(A) để đếm số các cặp nghịch đảo của dãy A cụ thể như sau:

 Lý thuyết Tin học 11 Bài 26 (Kết nối tri thức): Phương pháp làm mịn dần trong thiết kế chương trình (ảnh 1)

B. Bài tập Phương pháp làm mịn dần trong thiết kế chương trình

Đang cập nhật…

Xem thêm các bài lý thuyết Tin học 11 sách Kết nối tri thức hay, chi tiết tại: 

Lý thuyết Bài 21: Các thuật toán sắp xếp đơn giản

Lý thuyết Bài 23: Kiểm thử và đánh giá chương trình

Lý thuyết Bài 24: Đánh giá độ phức tạp thời gian thuật toán

Lý thuyết Bài 28: Thiết kế chương trình theo Mô đun

Lý thuyết Bài 30: Thiết lập thư viện cho chương trình

1 1590 lượt xem


Xem thêm các chương trình khác: