Skip to content

Trang Học trực tuyến

  • Môn Toán

Trang Học trực tuyến

  • Home » 
  • Tin học lớp 11

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

By admin 11/10/2023 0

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

Khởi động trang 38 Chuyên đề Tin học 11: 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

1. Ý tưởng thuật toán sắp xếp trộn

Hoạt động trang 38 Chuyên đề Tin học 11: 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).

2. Thuật toán sắp xếp trộn

3. Mô hình tổng quát của phương pháp chia để trị

Luyện tập trang 45 Chuyên đề Tin học 11: 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 học 11: 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

#include

// 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

#include

// 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 học 11: 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.

Xem thêm lời giải bài tập Chuyên đề học tập Tin học lớp 11 Cánh diều hay, chi tiết khác:

Bài 3: Thực hành ứng dụng thuật toán tìm kiếm nhị phân bằng đệ quy

Bài 4: Kĩ thuật chia để trị trong thuật toán sắp xếp trộn

Bài 5: Thực hành tổng hợp ứng dụng chia để trị

Bài 1: Kĩ thuật duyệt

Bài 2: Kĩ thuật quay lui

Share
facebookShare on FacebooktwitterShare on TwitteremailShare on Email
Post navigation
Previous post

Bộ 7 Đề thi Giữa học kì 1 Tiếng Anh lớp 11 Hà Nội năm 2023

Next post

Lý thuyết Địa lí 11 Bài 6 (Chân trời sáng tạo 2023): Một số vấn đề về an ninh toàn cầu

Bài liên quan:

Giải SBT Tin học 11 Kết nối tri thức | Sách bài tập Tin học 11 Kết nối tri thức (hay, chi tiết)

Giải sgk Tin học 11 (KNTT, CD) | Giải bài tập Tin học 11 (hay, chi tiết) | Giải Tin 11 (sách mới)

Giải sgk Tin học 11 Kết nối tri thức | Giải bài tập Tin học 11 KNTT (hay, ngắn gọn) | Soạn Tin 11 KNTT

Giải SGK Tin học 11 Bài 4 (Kết nối tri thức): Bên trong máy tính

Giải SGK Tin học 11 Bài 5 (Kết nối tri thức): Kết nối máy tính với các thiết bị số

Giải SGK Tin học 11 Bài 6 (Kết nối tri thức): Lưu trữ và chia sẻ tệp tin trên internet

Giải SGK Tin học 11 Bài 7 (Kết nối tri thức): Thực hành tìm kiếm thông tin trên Internet

Giải SGK Tin học 11 Bài 8 (Kết nối tri thức): Thực hành nâng cao sử dụng thư điện tử và mạng xã hội

Leave a Comment Hủy

Mục lục

  1. Giải SBT Tin học 11 Kết nối tri thức | Sách bài tập Tin học 11 Kết nối tri thức (hay, chi tiết)
  2. Giải sgk Tin học 11 (KNTT, CD) | Giải bài tập Tin học 11 (hay, chi tiết) | Giải Tin 11 (sách mới)
  3. Giải sgk Tin học 11 Kết nối tri thức | Giải bài tập Tin học 11 KNTT (hay, ngắn gọn) | Soạn Tin 11 KNTT
  4. Giải SGK Tin học 11 Bài 4 (Kết nối tri thức): Bên trong máy tính
  5. Giải SGK Tin học 11 Bài 5 (Kết nối tri thức): Kết nối máy tính với các thiết bị số
  6. Giải SGK Tin học 11 Bài 6 (Kết nối tri thức): Lưu trữ và chia sẻ tệp tin trên internet
  7. Giải SGK Tin học 11 Bài 7 (Kết nối tri thức): Thực hành tìm kiếm thông tin trên Internet
  8. Giải SGK Tin học 11 Bài 8 (Kết nối tri thức): Thực hành nâng cao sử dụng thư điện tử và mạng xã hội
  9. Giải SGK Tin học 11 Bài 9 (Kết nối tri thức): Giao tiếp an toàn trên internet
  10. Giải SGK Tin học 11 Bài 10 (Kết nối tri thức): Lưu trữ dữ liệu và khai thác thông tin phục vụ quản lí
  11. Giải SGK Tin học 11 Bài 11 (Kết nối tri thức): Cơ sở dữ liệu
  12. Giải SGK Tin học 11 Bài 12 (Kết nối tri thức): Hệ quản trị cơ sở dữ liệu và hệ cơ sở dữ liệu
  13. Giải SGK Tin học 11 Bài 13 (Kết nối tri thức): Cơ sở dữ liệu quan hệ
  14. Giải SGK Tin học 11 Bài 14 (Kết nối tri thức): SQL – Ngôn ngữ truy vấn có cấu trúc
  15. Giải SGK Tin học 11 Bài 15 (Kết nối tri thức): Bảo mật và an toàn hệ cơ sở dữ liệu
  16. Giải SGK Tin học 11 Bài 16 (Kết nối tri thức): Công việc quản trị cơ sở dữ liệu
  17. Giải SGK Tin học 11 Bài 17 (Kết nối tri thức): Dữ liệu mảng một chiều và hai chiều
  18. Giải SGK Tin học 11 Bài 18 (Kết nối tri thức): Thực hành dữ liệu mảng một chiều và hai chiều
  19. Giải SGK Tin học 11 Bài 19 (Kết nối tri thức): Bài toán tìm kiếm
  20. Giải SGK Tin học 11 Bài 20 (Kết nối tri thức): Thực hành bài toán tìm kiếm
  21. Giải SGK Tin học 11 Bài 21 (Kết nối tri thức): Các thuật toán sắp xếp đơn giản
  22. Giải SGK Tin học 11 Bài 22 (Kết nối tri thức): Thực hành bài toán sắp xếp
  23. Giải SGK Tin học 11 Bài 23 (Kết nối tri thức): Kiểm thử và đánh giá chương trình
  24. Giải SGK Tin học 11 Bài 24 (Kết nối tri thức): Đánh giá độ phức tạp thời gian thuật toán
  25. Giải SGK Tin học 11 Bài 25 (Kết nối tri thức): Thực hành xác định độ phức tạp thời gian thuật toán
  26. Giải SGK 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
  27. Giải SGK Tin học 11 Bài 27 (Kết nối tri thức): Thực hành thiết kế chương trình theo phương pháp làm mịn dần
  28. Giải SGK Tin học 11 Bài 28 (Kết nối tri thức): Thiết kế chương trình theo mô đun
  29. Giải SGK Tin học 11 Bài 29 (Kết nối tri thức): Thực hành thiết kế chương trình theo mô đun
  30. Giải SGK Tin học 11 Bài 30 (Kết nối tri thức): Thiết lập thư viện cho chương trình
  31. Giải SGK Tin học 11 Bài 31 (Kết nối tri thức): Thực hành thiết lập thư viện chương trình
  32. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 5: Thực hành thiết kế thuật toán theo kĩ thuật đệ quy
  33. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 4: Tháp Hà Nội
  34. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 3: Thực hành giải toán theo kĩ thuật đệ quy
  35. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 2: Thiết kế thuật toán đệ quy
  36. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 1: Đệ quy và hàm đệ quy
  37. Chuyên đề Tin học 11 Kết nối tri thức | Giải Chuyên đề học tập Tin học 11 KNTT (hay, ngắn gọn)
  38. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 10: Thực hành giải toán bằng kĩ thuật chia để trị
  39. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 9: Sắp xếp trộn
  40. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 8: Thực hành thiết thuật toán tìm kiếm theo kĩ thuật chia để trị
  41. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 7: Thiết kế thuật toán theo kĩ thuật chia để trị
  42. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 6: Ý tưởng và kĩ thuật chia để trị
  43. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 16: Thực hành thiết kế thuật toán theo kĩ thuật quay lui
  44. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 15: Bài toán xếp hậu
  45. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 14: Thực hành kĩ thuật duyệt quay lui
  46. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 13: Kĩ thuật duyệt quay lui
  47. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 12: Thực hành kĩ thuật duyệt cho bài toán tìm kiếm
  48. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 11: Bài toán tìm kiếm theo kĩ thuật duyệt
  49. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 5: Thiết kế sản phẩm trang trí hoàn chỉnh
  50. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 4: Chỉnh sửa, ghép nối, kết nối các đối tượng đồ họa
  51. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 3: Làm việc với đối tượng đường
  52. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 2: Làm việc với đối tượng hình khối

Copyright © 2025 Trang Học trực tuyến
  • Sach toan
  • Giới thiệu
  • LOP 12
  • Liên hệ
  • Sitemap
  • Chính sách
Back to Top
Menu
  • Môn Toán