Giao diện mới của VnDoc Pro: Dễ sử dụng hơn - chỉ tập trung vào lớp bạn quan tâm. Vui lòng chọn lớp mà bạn quan tâm: Lưu và trải nghiệm
Đóng
Điểm danh hàng ngày
  • Hôm nay +3
  • Ngày 2 +3
  • Ngày 3 +3
  • Ngày 4 +3
  • Ngày 5 +3
  • Ngày 6 +3
  • Ngày 7 +5
Bạn đã điểm danh Hôm nay và nhận 3 điểm!
Nhắn tin Zalo VNDOC để nhận tư vấn mua gói Thành viên hoặc tải tài liệu Hotline hỗ trợ: 0936 120 169

Giải Chuyên đề Tin học 11 Cánh diều bài 4: Kĩ thuật chia để trị trong thuật toán sắp xếp trộn

Lớp: Lớp 11
Môn: Tin Học
Dạng tài liệu: Chuyên đề
Bộ sách: Cánh diều
Loại File: PDF
Phân loại: Tài liệu Tính phí

Giải Chuyên đề Tin học 11 bài 4: Kĩ thuật chia để trị trong thuật toán sắp xếp trộn là tài liệu hữu ích giúp bạn đọc có thể trau dồi nội dung kiến thức, học tập tốt hơn môn Tin học 11 nhé.

Khởi động trang 38 Chuyên đề Tin 11 Cánh diều

Bài 2 giới thiệu kĩ thuật đệ quy trong phương pháp chia để trị. Nhiều bài được giải quyết dễ dàng bằng cách sử dụng kĩ thuật đệ quy. Ví dụ: Em hãy chia đôi dãy gồm bốn số {7, 3, 8, 2} làm hai nửa để thực hiện công việc sắp xếp bốn số này theo thứ tự tăng dần của giá trị.

Gợi ý: 7 3 8 2->3 7 2 8 ->2 3 7 8

Lời giải:

Em chia đôi dãy gồm bốn số {7, 3, 8, 2} làm hai nửa để thực hiện công việc sắp xếp bốn số này theo thứ tự tăng dần của giá trị: 7 3 8 2->3 7 2 8 ->2 3 7 8

Hoạt động trang 38 Chuyên đề Tin 11 Cánh diều

Thầy giáo lớp Thanh An mời 5 bạn học sinh lên bảng, xếp ngẫu nhiên thành một hàng ngang, từ trái sang phải là các bạn có tên Thi, An, Hoà, Lâm, Mai. Em hãy giúp thầy giáo yêu cầu 5 bạn thực hiện lần lượt các bước trong hai giai đoạn sau để sắp xếp hàng tăng dần theo chiều cao từ trái sang phải.

Lời giải:

Giai đoạn 1: Ở giai đoạn này. với mỗi lượt, mỗi dãy được chia làm hai dãy nhỏ với mục tiêu sắp xếp tăng dần trên từng dãy nhỏ (Hình 1). Quá trình kết thúc khi mỗi dãy có đúng một bạn:

Lượt 1: Chia thành hai dãy, một dãy 2 bạn (Thi, An) và một dãy 3 bạn (Hoà, Lâm, Mai).

Lượt 2: Chia mỗi dãy trong hai dãy trên thành hai dãy nhỏ, lần hượt là: (Thi), (An) (Hoà) và (Lâm, Mai).

Lượt 3: Chia dãy (Lâm, Mai) thành hai dãy mỗi dãy có đúng một bạn: (Lâm), (Mai).

Luyện tập trang 45 Chuyên đề Tin 11 Cánh diều

Em hãy cho biết trong mô tả thuật toán sắp xếp trộn và trong chương tình cài đặt ở trên cần thay đổi thế nào để sắp xếp một dãy theo thứ tự giảm dần của giá trị.

Lời giải:

Các thuật toán sắp xếp đơn giản như Bubble Sort, Insertion Sort . . . đều không thể xử lý được dữ liệu lớn. Thuật toán sắp xếp trộn lấy ý tưởng từ việc chia để trị để chia nhỏ bài toán thành các bài toán nhỏ hơn, sau đó giải quyết chúng. Từ đó sẽ giúp xử lý dữ liệu lớn một cách tốt hơn, tối ưu về mặt thời gian.

Ý tưởng đưa ra như sau:

Chia danh sách gồm n phần tử chưa được sắp xếp thành n danh sách con, mỗi danh sách chứa một phần tử (danh sách một phần tử được coi là đã sắp xếp).

Liên tục hợp nhất các danh sách con để tạo ra các danh sách con được sắp xếp mớ cho đến khi chỉ còn lại một danh sách. Đây sẽ là danh sách được sắp xếp.

Ví dụ:

void Swap(int &a, int &b){

int temp = a;

a = b;

b = temp;

}

void InterchangeSort(int a[], int n){

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if(a[i] > a[j]) //nếu có nghịch thế thì đổi chỗ

Swap(a[i], a[j]);

}

Vận dụng trang 45 Chuyên đề Tin 11 Cánh diều

Hội diễn văn nghệ của trường năm nay, lớp Thanh An tham gia biểu diễn khiêu vũ tập thể theo cặp (nam, nữ). Thầy giáo chủ nhiệm chọn ra n bạn nam có chiều cao A0, A1,...An-1, đứng thành một hàng ngang và n bạn nữ có chiều cao B0, B1,...Bn-1 đứng thành một hàng ngang để ghép thành n cặp (nam, nữ). Để tiện ghép cặp, thầy giáo sắp xếp lại vị trí đứng các bạn nam trong hàng theo thứ tự chiều cao tăng dần và vị trí đứng các bạn nữ trong hàng cũng theo thứ tự chiều cao tăng dần. Sau đó thầy giáo tiến hành ghép cặp bạn nam thấp nhất với bạn nữ thấp nhất, bạn nam thấp thứ hai với bạn nữ thấp thứ hai và cứ như vậy đến bạn nam cao nhất với bạn nữ cao nhất. Em hãy viết chương trình áp dựng thuật toán sắp xếp trộn đề giúp thầy giáo thực hiện công việc ghép cặp này.

Chương trình cần nhập vào một số nguyên n, tiếp theo nhập vào n giá trị A0, A1, An-1 và n giá trị B0, B1, Bn-1.

Chương trình cần in ra n cặp số Ai, Bj (0 < i, j < n-1) là cách xếp cặp (nam, nữ) theo mong muốn của thầy giáo ở trên.

Lời giải:

// Code from https://nguyenvanhieu.vn

#include<stdlib.h>

#include<stdio.h>

// Gộp hai mảng con arr[l...m] và arr[m+1..r]

void merge(int arr[], int l, int m, int r)

{

int i, j, k;

int n1 = m - l + 1;

int n2 = r - m;

/* Tạo các mảng tạm */

int L[n1], R[n2];

/* Copy dữ liệu sang các mảng tạm */

for (i = 0; i < n1; i++)

L[i] = arr[l + i];

for (j = 0; j < n2; j++)

R[j] = arr[m + 1+ j];

/* Gộp hai mảng tạm vừa rồi vào mảng arr*/

i = 0; // Khởi tạo chỉ số bắt đầu của mảng con đầu tiên

j = 0; // Khởi tạo chỉ số bắt đầu của mảng con thứ hai

k = l; // IKhởi tạo chỉ số bắt đầu của mảng lưu kết quả

while (i < n1 && j < n2)

{

if (L[i] <= R[j])

{

arr[k] = L[i];

i++;

}

else

{

arr[k] = R[j];

j++;

}

k++;

}

/* Copy các phần tử còn lại của mảng L vào arr nếu có */

while (i < n1)

{

arr[k] = L[i];

i++;

k++;

}

/* Copy các phần tử còn lại của mảng R vào arr nếu có */

while (j < n2)

{

arr[k] = R[j];

j++;

k++;

}

}

/* l là chỉ số trái và r là chỉ số phải của mảng cần được sắp xếp */

void mergeSort(int arr[], int l, int r)

{

if (l < r)

{

// Tương tự (l+r)/2, nhưng cách này tránh tràn số khi l và r lớn

int m = l+(r-l)/2;

// Gọi hàm đệ quy tiếp tục chia đôi từng nửa mảng

mergeSort(arr, l, m);

mergeSort(arr, m+1, r);

merge(arr, l, m, r);

}

}

/* Hàm xuất mảng */

void printArray(int A[], int size)

{

int i;

for (i=0; i < size; i++)

printf("%d ", A[i]);

printf("\n");

}

int main()

{

int arr[] = {12, 11, 13, 5, 6, 7};

int arr_size = sizeof(arr)/sizeof(arr[0]);

printf("Given array is \n");

printArray(arr, arr_size);

mergeSort(arr, 0, arr_size - 1);

printf("\nSorted array is \n");

printArray(arr, arr_size);

return 0;

}// Code from https://nguyenvanhieu.vn

#include<stdlib.h>

#include<stdio.h>

// Gộp hai mảng con arr[l...m] và arr[m+1..r]

void merge(int arr[], int l, int m, int r)

{

int i, j, k;

int n1 = m - l + 1;

int n2 = r - m;

/* Tạo các mảng tạm */

int L[n1], R[n2];

/* Copy dữ liệu sang các mảng tạm */

for (i = 0; i < n1; i++)

L[i] = arr[l + i];

for (j = 0; j < n2; j++)

R[j] = arr[m + 1+ j];

/* Gộp hai mảng tạm vừa rồi vào mảng arr*/

i = 0; // Khởi tạo chỉ số bắt đầu của mảng con đầu tiên

j = 0; // Khởi tạo chỉ số bắt đầu của mảng con thứ hai

k = l; // IKhởi tạo chỉ số bắt đầu của mảng lưu kết quả

while (i < n1 && j < n2)

{

if (L[i] <= R[j])

{

arr[k] = L[i];

i++;

}

else

{

arr[k] = R[j];

j++;

}

k++;

}

/* Copy các phần tử còn lại của mảng L vào arr nếu có */

while (i < n1)

{

arr[k] = L[i];

i++;

k++;

}

/* Copy các phần tử còn lại của mảng R vào arr nếu có */

while (j < n2)

{

arr[k] = R[j];

j++;

k++;

}

}

/* l là chỉ số trái và r là chỉ số phải của mảng cần được sắp xếp */

void mergeSort(int arr[], int l, int r)

{

if (l < r)

{

// Tương tự (l+r)/2, nhưng cách này tránh tràn số khi l và r lớn

int m = l+(r-l)/2;

// Gọi hàm đệ quy tiếp tục chia đôi từng nửa mảng

mergeSort(arr, l, m);

mergeSort(arr, m+1, r);

merge(arr, l, m, r);

}

}

/* Hàm xuất mảng */

void printArray(int A[], int size)

{

int i;

for (i=0; i < size; i++)

printf("%d ", A[i]);

printf("\n");

}

int main()

{

int arr[] = {12, 11, 13, 5, 6, 7};

int arr_size = sizeof(arr)/sizeof(arr[0]);

printf("Given array is \n");

printArray(arr, arr_size);

mergeSort(arr, 0, arr_size - 1);

printf("\nSorted array is \n");

printArray(arr, arr_size);

return 0;

}

Câu hỏi tự kiểm tra trang 45 Chuyên đề Tin 11 Cánh diều

Trong các câu sau đây, câu nào đúng khi mô tả trình tự các bước cơ bản của phương pháp chia để trị?

a) Chia nhỏ bài toán: Kết hợp kết quả các bài toán con; Giải từng bài toán con bằng đệ quy.

b) Giải bài toán; Chia nhỏ bài toán; Kết hợp các kết quả bài toán.

c) Chia nhỏ bài toán; Giải từng bài toán con bằng đệ quy; Kết hợp kết quả các bài toán con.

Lời giải:

Trong các câu sau đây, câu sau đúng khi mô tả trình tự các bước cơ bản của phương pháp chia để trị:

c) Chia nhỏ bài toán; Giải từng bài toán con bằng đệ quy; Kết hợp kết quả các bài toán con.

Chọn file muốn tải về:
Đóng Chỉ thành viên VnDoc PRO/PROPLUS tải được nội dung này!
Đóng
79.000 / tháng
Đặc quyền các gói Thành viên
PRO
Phổ biến nhất
PRO+
Tải tài liệu Cao cấp 1 Lớp
30 lượt tải tài liệu
Xem nội dung bài viết
Trải nghiệm Không quảng cáo
Làm bài trắc nghiệm không giới hạn
Mua cả năm Tiết kiệm tới 48%

Có thể bạn quan tâm

Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
Sắp xếp theo
🖼️

Tin học 11 Cánh diều

Xem thêm
🖼️

Gợi ý cho bạn

Xem thêm