Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C. Cần thiết lập hai hàm

Vận dụng 3 trang 39 Chuyên đề Tin học 11: Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C. Cần thiết lập hai hàm sau bằng kĩ thuật chia để trị:

– Hàm firstInd(A, left, right, C) sẽ tìm chỉ số của phần tử đầu tiên của dãy A có giá

trị bằng C. Nếu không sẽ trả về -1.

– Hàm lastInd(A, left, right, C) sẽ tìm chỉ số của phần tử cuối cùng của dãy A có giá trị bằng C. Nếu không thấy sẽ trả về – 1.

Từ hai hàm đã thiết kế trên, đưa ra một cách giải khác cho bài toán trong nhiệm vụ 1. Lời giải này có độ phức tạp O(logn).

Trả lời

Để thiết lập hai hàm firstInd và lastInd bằng kĩ thuật chia để trị, ta có thể áp dụng phương pháp tương tự như khi tìm kiếm số lần xuất hiện của một phần tử trong dãy số bằng kĩ thuật chia để trị. Cụ thể, ta sẽ chia dãy số thành hai nửa và tìm kiếm đệ quy trên từng nửa đó.

Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C

Ví dụ:

Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C

Kết quả trả về:

Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số C

- Ta có thể sử dụng hàm firstInd và lastInd đã thiết kế để giải quyết bài toán tìm số lần xuất hiện của một số trong một dãy số.

Giả sử ta cần tìm số lần xuất hiện của số C trong dãy A đã sắp xếp tăng dần. Đầu tiên, ta sử dụng hàm firstInd để tìm chỉ số của phần tử đầu tiên có giá trị bằng C, sau đó sử dụng hàm lastInd để tìm chỉ số của phần tử cuối cùng có giá trị bằng C. Nếu cả hai hàm đều trả về giá trị khác -1, số lần xuất hiện của C trong dãy A sẽ là hiệu của chỉ số của phần tử cuối cùng và phần tử đầu tiên cộng thêm 1.

Vì mỗi lần gọi hàm firstInd và lastInd đều có độ phức tạp O(logn), nên độ phức tạp của giải pháp này sẽ là O(logn).

Cho trước dãy số A đã sắp xếp theo thứ tự tăng dần, cho trước hằng số 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 6: Ý tưởng và kĩ thuật chia để trị

Bài 7: Thiết kế thuật toán theo kĩ thuật chia để trị

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

Câu hỏi cùng chủ đề

Xem tất cả