TopStudy

Tin học · Lớp 11

Giải SGK Chuyên đề Tin học 11 Bài 7. Thiết kế thuật toán theo kĩ thuật chia để trị

11 câu · 17 phút · Ngân hàng đề TopStudy. Đáp án và lời giải do TopStudy biên soạn, mở ngay dưới từng câu.

Làm bài

Nội dung đề

Phần I. Tự luận

Câu 1

1 điểm

Trong bài học này em sẽ thiết kế lời giải cho hai bài toán sau:

1. Bài toán tính luỹ thừa exp(a, n) = an{a}^{n} với a là số bất kì (khác 0), n là số nguyên không âm, ở đây an{a}^{n} được hiểu là tích của n lần giá trị a an = a × a × ... × a (n lần).

2. Ban giám hiệu nhà trường cần tìm một bạn lớp em có chiều cao đúng bằng 1,7 m hoặc gần với chiều cao đó nhất để tham gia tập đội hình thể thao.

Với hai bài toán trên em sẽ thực hiện như thế nào?

Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

1. Để tính luỹ thừa của một số a với một số nguyên không âm n, em có thể sử dụng thuật toán đệ quy như sau:

Hình minh hoạ

2. Để tìm một bạn lớp có chiều cao gần với 1,7 m nhất, em có thể sử dụng một thuật toán tìm kiếm đơn giản như thuật toán tìm kiếm tuần tự hoặc tìm kiếm nhị phân. Tuy nhiên, để áp dụng thuật toán tìm kiếm nhị phân, em cần phải sắp xếp danh sách chiều cao của các bạn lớp trước.

Ví dụ, nếu danh sách chiều cao của các bạn lớp được lưu trữ trong một mảng a, em có thể sử dụng thuật toán tìm kiếm tuần tự như sau:

Hình minh hoạ

Câu 2

1 điểm
Hãy thiết lập thuật toán và chương trình tính luỹ thừa an{a}^{n} với a là số bất kì khác 0, n là số nguyên không âm.
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Hình minh hoạ

Hình minh hoạ

Câu 3

1 điểm
Mô tả các bước tính bằng tay phép tính luỹ thừa theo hai chương trình trên. Cách nào nhanh hơn?
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Vì an=a×an−1{a}^{n}=a\times {a}^{n-1}

1. Tính bình thường:

- Để tính 211{2}^{11} bằng phương pháp bình thường, ta sẽ lặp lại việc nhân 2 với chính nó 21 lần (tức là 2*** 2***...*2, lặp lại 21 lần).

Tuy nhiên, việc tính toán này sẽ rất tốn thời gian và không hiệu quả khi giá trị của số mũ lớn hơn.

2. Chia để trị:

Bước 1: Chia bài toán thành các bài toán con

Chia 11 cho 2, ta được kết quả là 5 và số dư là 1: 11 = 2 * 5 + 1

Bước 2: Giải quyết các bài toán con

Ta cần tính 2^5 để giải quyết bài toán con này. Tiếp tục áp dụng phương pháp chia để trị trên bài toán con này:

Chia 5 cho 2, ta được kết quả là 2 và số dư là 1: 5 = 2 * 2 + 1

Tiếp tục giải bài toán con tiếp theo:

Chia 2 cho 2, ta được kết quả là 1 và số dư là 0: 2 = 2 * 1 + 0

Bây giờ ta đã giải quyết được tất cả các bài toán con.

Bước 3: Tính toán kết quả

Từ bài toán con cuối cùng, ta có được: 2^1 = 2

Từ bài toán con thứ hai, ta có được: 2^2 = (2^1)^2 = 2^2 = 4

Từ bài toán con đầu tiên, ta có được: 2^5 = (2^2)^2 * 2 = 4^2 * 2 = 16 * 2 = 32

Vậy: 2^11 = 2^5 * 2^5 * 2 = 32 * 32 * 2 = 1024

Do đó, 2^11 = 1024.

Câu 4

1 điểm
Phép tính a21{a}^{21} sẽ cần dùng bao nhiêu phép nhân?
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Ta có công thức tổng quát sau: T(n) = T(n/2) + O(1) và T(0) = 1, O(1) =1

Với n = 21, T(21) = T(21/2) + 1 = T(10) + 1

= (T(5) + 1) + 1 =((T(2) + 1) + 1)+ 1 = T(1) + 1 + 3

= T(0) + 1 + 4 = 1 + 5 = 6

Câu 5

1 điểm
Xây dựng thuật toán cho bài toán sau: Cho trước dãy các số đã được sắp xếp tăng dần. Với giá trị K cho trước cần tìm phần tử của dãy gốc có giá trị gần với K nhất.
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

- Để tìm ra các phần tử của dãy gần K nhất chúng ta cần thêm các tính toán phụ tại dòng 10

Hình minh hoạ

- Chương trình trên hoàn toàn tương tự thuật toán tìm kiếm tuần tự, chỉ có một vòng lặp tại dòng 9, do đó có thời gian chạy O(n).

- Chúng ta thiết kế thuật toán thứ hai dựa trên tìm kiếm nhị phân. Hàm đệ quy chính sẽ được thiết kế theo dạng valueClosest(A, left, right, K) sẽ tìm phần tử gần K nhất trong khoảng chỉ số từ left đến right. Trước tiên có một số nhận xét cho các trường hợp đặc biệt.
+ Nếu n = 1, dãy A chỉ có một phần tử, khi đó hàm sẽ trả lại phần tử duy nhất của A.
+ Nếu n = 2, dãy A có hai phần tử thì cần so sánh phần tử nào gần K hơn chính
là phần tử cần tìm.

Chương trình cuối cùng có dạng như sau

Hình minh hoạ

Câu 6

1 điểm
Hãy giải thích kĩ hơn chương trình 2 trên tại các dòng 2 và 4.
Xem đáp án và lời giải

Câu 7

1 điểm
Nêu những điểm khác biệt của chương trình trên với chương trình tìm kiếm nhị phân đã biết
Xem đáp án và lời giải

Câu 8

1 điểm
Viết chương trình không đệ quy cho bài toán tìm kiếm nhị phần mở rộng trên.
Xem đáp án và lời giải

Câu 9

1 điểm
Viết chương trình đo thời gian thực chạy để so sánh hai phương án của bài toán.
Xem đáp án và lời giải

Câu 10

1 điểm
Tìm cách thiết lập thuật toán tính an{a}^{n} theo phương pháp chia để trị nhưng không sử dụng đệ quy.
Xem đáp án và lời giải

Câu 11

1 điểm

Bài toán tìm vùng chỉ số của dãy đã sắp xếp.

Thiết lập thuật toán chia để trị để giải bài toán sau: Cho trước dãy A gồm n phần tử đã được sắp xếp theo thứ tự tăng dần, ví dụ:

A= [1, 2, 3, 3, 4, 4, 4, 5, 6, 6]

Cho trước giá trị K, cần tìm ra vùng chỉ số gồm các phần tử bằng K. Chương trình cần trả về hai chỉ số start, end là vị trí bắt đầu và kết thúc gồm toàn các giá trị K. Nếu không tìm thấy K thì phải trả về -1, -1.

Trong ví dụ trên, nếu K = 4 thì cần trả về hai chỉ số 4, 6.

Xem đáp án và lời giải

Đề cùng chủ đề

Tất cả đề Chuyên đề 2. Thực hành thiết kế thuật toán theo kĩ thuật chia để trị · Các bộ sách Tin học Lớp 11