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 Kết nối tri thức Bài 9: Sắp xếp trộn

By admin 11/10/2023 0

Giải Chuyên đề Tin học 11 Bài 9: Sắp xếp trộn

Khởi động trang 40 Chuyên đề Tin học 11: Ta đã biết tìm kiếm nhị phân trên các dãy đã sắp xếp có độ phức tạp thời gian tốt hơn so với các thuật toán tìm kiếm trên dãy chưa sắp xếp. Chính vì thế, việc sắp xếp thông tin theo một trình tự nào đó luôn đóng vai trò quan trọng trong các bài toán tìm kiếm thông tin. Tuy nhiên, một số thuật toán sắp xếp mà em đã biết như sắp xếp chèn, sắp xếp chọn, sắp xếp nổi bọt, … đều có độ phức tạp thời gian O (n^2 ) (n – kích thước dãy cần sắp xếp). Câu hỏi đặt ra là: Liệu có hay không một cách sắp xếp dãy với thời gian tốt hơn O (n^2 )?

Liệu kĩ thuật chia để trị có thể áp dụng cho bài toán sắp xếp được không? Nếu có thì có làm tăng hiệu quả của sắp xếp được không?

Lời giải:

Kỹ thuật chia để trị có thể được áp dụng cho bài toán sắp xếp, và thực tế nó đã được sử dụng để thiết kế các thuật toán sắp xếp hiệu quả như QuickSort và MergeSort.

Tuy nhiên, trong thực tế, cách tiếp cận này không phải lúc nào cũng làm tăng hiệu quả của thuật toán sắp xếp. QuickSort và MergeSort, mặc dù sử dụng phương pháp chia để trị, thường là những thuật toán có hiệu quả cao. Nhưng nếu áp dụng phương pháp chia để trị cho một thuật toán sắp xếp khác như BubbleSort hoặc InsertionSort, chẳng hạn, thì không có nhiều lợi ích. Trong những trường hợp đó, việc sử dụng phương pháp chia để trị có thể làm giảm hiệu quả của thuật toán sắp xếp.

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

Hoạt động trang 40 Chuyên đề Tin học 11: Quan sát và thực hiện các bước theo ý tưởng của thuật toán sắp xếp trộn để biết thuật toán này là mô hình kĩ thuật chia để trị.

Quan sát và thực hiện các bước theo ý tưởng của thuật toán sắp xếp trộn

Hình 9.1. Mô phỏng sắp xếp trộn

Lời giải:

Đặc thù của 3 giai đoạn là: Chia nhỏ dãy gốc thành các dãy với kích thước nhỏ hơn (bằng 12dãy ban đầu), tiếp tục cho đến khi nhận được các dãy con đã sắp xếp đúng thì tiến hành trộn các dãy này để nhận được kết quả cuối cùng.

Câu hỏi 1 trang 41 Chuyên đề Tin học 11: Hãy thực hiện thao tác trộn hai dãy sau: B = 1, 4, 7; C = 2, 3, 6

Lời giải:

Để trộn hai dãy số B và C, ta có thể sử dụng phương pháp trộn hai mảng đã được sắp xếp.

Ý tưởng của phương pháp này là tạo ra một mảng mới D có độ dài bằng tổng độ dài của hai mảng B và C, và sau đó lần lượt chọn phần tử nhỏ nhất trong hai mảng B và C để đưa vào mảng D cho đến khi hai mảng B và C đều đã được chọn hết và thu được mảng D gồm các số sắp xếp theo thứ tự tăng dần như sau: D = 1, 2, 3, 4, 6, 7

Câu hỏi 2 trang 41 Chuyên đề Tin học 11: Thực hiện sắp xếp dãy 3, 2, 7, 1, 6, 5 theo các bước tương tự trên

Lời giải:

Thực hiện sắp xếp dãy 3, 2, 7, 1, 6, 5 theo các bước tương tự trên 

2. Mô tả thuật toán sắp xếp trộn

Hoạt động 2 trang 41 Chuyên đề Tin học 11: Cùng thực hiện các bước cụ thể triển khai ý tưởng và cài đặt chương trình cho thuật toán sắp xếp trộn

Lời giải:

– Các bước sắp xếp trộn (merge sort) như sau:

1. Nếu mảng chỉ có một phần tử hoặc không có phần tử nào, thì mảng đó đã được sắp xếp và ta không cần phải làm gì thêm.

2. Chia mảng thành hai phần bằng cách tìm chỉ số giữa (midpoint).

3. Đệ quy sắp xếp phần đầu tiên của mảng (từ đầu đến giữa).

4. Đệ quy sắp xếp phần thứ hai của mảng (từ giữa đến cuối).

5. Trộn (merge) hai phần đã được sắp xếp thành một mảng mới. Khi trộn, ta so sánh phần tử đầu tiên của từng mảng và chọn phần tử nhỏ hơn để đưa vào mảng mới. Sau đó, ta lặp lại quá trình này cho đến khi hết phần tử trong một trong hai mảng. Cuối cùng, ta đưa tất cả các phần tử còn lại của mảng còn lại vào mảng mới.

6. Trả về mảng đã được sắp xếp.

Các bước này sẽ được lặp lại cho đến khi tất cả các phần tử của mảng đã được sắp xếp.

– Cài đặt:

Cùng thực hiện các bước cụ thể triển khai ý tưởng và cài đặt chương trình cho thuật toán sắp xếp trộn

Cùng thực hiện các bước cụ thể triển khai ý tưởng và cài đặt chương trình cho thuật toán sắp xếp trộn

Câu hỏi 1 trang 43 Chuyên đề Tin học 11: Trong chương trình 1 (trộn hai dãy B, C), vòng lặp tại dòng 6 có nhiều nhất là bao nhiêu bước lặp?

Lời giải:

Ta biết rằng i ban đầu bằng 0 và tăng lên 1 sau mỗi lần lặp, do đó i sẽ tăng từ 0 đến m-1 (tổng cộng m bước lặp).

Tương tự, j ban đầu bằng 0 và tăng lên 1 sau mỗi lần lặp, nên j sẽ tăng từ 0 đến n-1 (tổng cộng n bước lặp).

Vì vậy, số bước lặp tối đa của vòng lặp này là min(m, n) (tức là số phần tử ít hơn trong hai dãy B và C). Do đó, vòng lặp sẽ lặp tối đa min(m, n) lần

Câu hỏi 2 trang 43 Chuyên đề Tin học 11: Mô tả các bước thực hiện chương trình 2 nếu dãy gốc A chỉ có một phần tử

Lời giải:

Mô tả các bước thực hiện chương trình 2 nếu dãy gốc A chỉ có một phần tử:

Nếu dãy có 1 phần tử thì trả về kết quả là dãy A ngay.

3. Đánh giá thuật toán sắp xếp trộn

Hoạt động 3 trang 43 Chuyên đề Tin học 11: Phân tích, trao đổi, thảo luận để tính độ phức tạp thời gian của thuật toán sắp xếp trộn

Lời giải:

Gọi T(n) là thời gian chạy của thuật toán sắp xếp trộn.

Với n = 1, dòng lệnh 2 trả lại ngay dãy gốc A, do đó T(1) = 1.

Trường hợp tổng quát

– Tại bước chia (dòng 5), cần O(1) thời gian để thực hiện.

– Các dòng 6, 7 sẽ mất 2T(n/2) thời gian.

– Dòng lệnh 8 thực hiện trộn hai dãy với thời gian O(n).

Tổng kết lại chúng ta các công thức sau tính thời gian T(n).

T(1)=1

T(n) = 2T(n/2) + O(n), n > 1                (1)

Không mất tổng quát, giả sử tồn tại hằng số C > 0 sao cho:

T(n) = 2T (n/2)+ Cn, n > 1                    (2)

Các công thức (1), (2) được gọi là công thức truy hồi để tính độ phức tạp thời gian T(n)
của thuật toán trộn.

Người ta tính được: T(n) = O(nlogn).

Câu hỏi 1 trang 44 Chuyên đề Tin học 11: Tính thời gian chạy của thuật toán sắp xếp trộn nếu A = [3, 1]

Lời giải:

Thời gian chạy của thuật toán sắp xếp trộn nếu A = [3, 1] →n = 2:

T(2) = O(2log2) ≈ 2× 0.3 = 0.6

Câu hỏi 2 trang 44 Chuyên đề Tin học 11: Mô tả thực hiện các bước của sắp xếp trộn với dãy A = [5, 1, 7, 4]. Trường hợp này T(4) sẽ được tính như thế nào?

Lời giải:

Mô tả thực hiện các bước của sắp xếp trộn với dãy A = [5, 1, 7, 4]

Mô tả thực hiện các bước của sắp xếp trộn với dãy A = [5, 1, 7, 4]

T(4) = O(4log4) ≈ 2× 0.6 = 1.2

Luyện tập

Luyện tập 1 trang 44 Chuyên đề Tin học 11: Viết chương trình thực hiện công việc sau:

– Dữ liệu được nhập từ tệp văn bản Data.inp bao gồm hai dòng, mỗi dòng là một dãy các số nguyên đã được sắp xếp theo thứ tự tăng dần, các số cách nhau bởi dấu cách. Hai dãy này có thể không bằng nhau về kích thước.

– Chương trình sẽ thực hiện trộn hai dãy trên và đưa kết quả dãy được trộn ra tệp Data.out theo một hàng ngang.

Lời giải:

Đây là một ví dụ về cách viết chương trình bằng ngôn ngữ Python để trộn hai dãy số được lưu trữ trong tệp văn bản “Data.inp” và ghi kết quả vào tệp “Data.out”:

Viết chương trình thực hiện công việc

– Đầu tiên, chương trình sử dụng hàm open() để mở tệp “Data.inp” với chế độ đọc dữ liệu (‘r’).

– Sau đó, chương trình đọc hai dòng dữ liệu từ tệp bằng cách sử dụng phương thức readline(), và loại bỏ các ký tự trắng ở đầu và cuối dòng bằng phương thức strip().

– Tiếp theo, chương trình sử dụng phương thức split() để tách các số trong hai dòng dữ liệu thành một danh sách các số nguyên. Hàm int() được sử dụng để chuyển đổi các chuỗi số sang kiểu số nguyên.

– Sau đó, chương trình trộn hai danh sách số lại với nhau bằng cách sử dụng phương thức sorted() để sắp xếp danh sách theo thứ tự tăng dần.

– Cuối cùng, chương trình sử dụng hàm open() để mở tệp “Data.out” với chế độ ghi dữ liệu (‘w’), và sử dụng phương thức write() để ghi danh sách số trộn được vào tệp. Hàm join() được sử dụng để chuyển đổi các số trong danh sách trở lại thành chuỗi, và ký tự dấu cách được sử dụng để ngăn cách giữa các số.

Luyện tập 2 trang 44 Chuyên đề Tin học 11: Viết lại chương trình hoàn chỉnh thực hiện sắp xếp trộn với dãy A cho trước trên một tệp văn bản. Kết quả đưa ra màn hình.

Lời giải:

Chương trình hoàn chỉnh như sau:

Viết lại chương trình hoàn chỉnh thực hiện sắp xếp trộn với dãy A trên một tệp văn bản

Vận dụng

Vận dụng 1 trang 44 Chuyên đề Tin học 11: Viết chương trình hoàn chỉnh nhập dãy số bất kì từ tệp văn bản, sau đó tiến hành sắp xếp dãy số này theo hai cách khác nhau, cách 1 là một trong các thuật toán sắp xếp đã biết, cách 2 là sắp xếp trộn. Đo thời gian chạy thực sự của hai cách trên, so sánh và kết luận về ưu điểm của sắp xếp trộn.

Lời giải:

Chương trình hoàn chỉnh như sau:

Viết lại chương trình hoàn chỉnh thực hiện sắp xếp trộn với dãy A cho trước trên một tệp văn bản (ảnh 1)

Vận dụng 2 trang 44 Chuyên đề Tin học 11: Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước, cụ thể như sau.

– Thủ tục trộn sẽ có dạng sau: merge(A,left,mid,right). Thủ tục này sẽ trộn hai phân đoạn của dãy A là A[left], …., A[mid] và A[mid + 1]….. A[right]. Hai phân đoạn này phải được sắp xếp đúng trước đó.

– Thuật toán chính có dạng mergeSoft(A, left, right) như sau:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

– Lệnh gọi hàm đệ quy là:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

Lời giải:

1. Đầu tiên, ta cần import các thư viện time và random để thực hiện đo thời gian và sinh số ngẫu nhiên cho dãy số:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

2. Tiếp theo, ta sẽ tạo một hàm để sắp xếp dãy số bằng thuật toán sắp xếp nổi bọt:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

3. Sau đó, ta cần tạo một hàm để sắp xếp dãy số bằng thuật toán sắp xếp trộn:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

4. Tiếp theo, ta sẽ đọc dãy số từ tệp văn bản và lưu vào một list:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

5. Tiếp theo, ta tạo một bản sao của list này để thực hiện sắp xếp bằng hai cách khác nhau:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

6. Sau đó, ta thực hiện sắp xếp bằng thuật toán sắp xếp nổi bọt và đo thời gian chạy:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

7. Tiếp theo, ta thực hiện sắp xếp bằng thuật toán sắp xếp trộn và đo thời gian chạy:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

8. In kết quả mảng sau khi sắp xếp:

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước

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

Bài 8: Thực hành thiết thuật toán tìm kiếm theo kĩ thuật chia để trị

Bài 9: Sắp xếp trộn

Bài 10: Thực hành giải toán bằng kĩ thuật chia để trị

Bài 11: Bài toán tìm kiếm theo kĩ thuật duyệt

Bài 12: Thực hành kĩ thuật duyệt cho bài toán tìm kiếm

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

Giải SGK Tiếng anh 11 Review 2 | Global Success

Next post

Lý thuyết Địa lí 11 Bài 16 (Kết nối tri thức 2023): Kinh tế khu vực Tây Nam Á

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 8: Thực hành thiết thuật toán tìm kiếm theo kĩ thuật chia để trị
  40. 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ị
  41. 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ị
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. Giải Chuyên đề Tin học 11 Kết nối tri thức Bài 1: Giới thiệu phần mềm vẽ trang trí

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