Đáp án Tin học 11 định hướng khoa học máy tính Cánh diều chủ đề F(cs) bài 7: Lập trình giải bài toán tìm kiếm
File đáp án Tin học 11 định hướng tin học ứng dụng cánh diều chủ đề chủ đề F(cs) bài 7: Lập trình giải bài toán tìm kiếm. Toàn bộ câu hỏi, bài tập ở trong bài học đều có đáp án. Tài liệu dạng file word, tải về dễ dàng. File đáp án này giúp kiểm tra nhanh kết quả. Chỉ có đáp án nên giúp học sinh tư duy, tránh học vẹt
Xem: => Giáo án tin học 11 theo định hướng khoa học máy tính cánh diều
CHỦ ĐỀ FCS: GIẢI QUYẾT VẤN ĐỀ VỚI SỰ TRỢ GIÚP CỦA MÁY TÍNH
BÀI 7 LẬP TRÌNH GIẢI BÀI TOÁN TÌM KIẾM
KHỞI ĐỘNG
Câu 1: Khi tạo mới một tài khoản người dùng, em được yêu cầu nhập tên người dùng “user name”. Có trường hợp em phải nhập lại tên khác vì tên vừa nhập đã có người sử dụng rồi. Theo em, máy tính làm gì ngay sau khi nhận được yêu cầu tạo mới một tài khoản? Hãy phát biểu thành một bài toán.
Trả lời:
- Bắt đầu tìm kiếm dữ liệu và tiến hành xử lí thông tin
HOẠT ĐỘNG
Câu 1: Em hãy thực hiện các yêu cầu sau:
- Viết mã giả cho thuật toán tìm kiếm nhị phân.
- Ước lượng số lần thực hiện vòng lặp trong thuật toán tìm kiếm nhị phân.
- Ước lượng độ phức tạp thời gian của thuật toán tìm kiếm nhị phân.
Trả lời:
Sau lần chia đôi đầu tiên, pham vi tìm kiếm còn lại n/2 số, sau khi chia đôi lần thứ hai, dãy còn lại n/4 số, sau khi chia đôi lần thứ dãy còn lại n/8, …sau khi chia đôi lần k dãy còn lại n/2.mũ k. Kết thúc khi 2 mũ k sấp xỉ n.
VẬN DỤNG
Câu 1: Viết chương trình tìm kiếm vị trí tên của một người trong mỗi danh sách sau đây:
- a) Danh sách học sinh của lớp em.
- b) Danh sách tên các chủ tài khoản ngân hàng (kí tự không dấu) và đã sắp thứ tự theo bang chữ cái.
Trả lời:
- a) Gợi ý
Gán i = 0
Gán j = 0
Nếu A[j] > A[j + 1] thì đối chỗ A[j] và A[j + 1]
Nếu j < n – i – 1:
Đúng thì j = j + 1 và quay lại bước 3
Sai thì sang bước 5
Nếu i < n – 1:
Đúng thì i = i + 1 và quay lại bước 2
Sai thì dừng lại
- b) Gợi ý:
#include<stdio.h>
#include<string.h>
int main() {
char s[4][20];
char t[20];
int i, j;
int size = 4;
printf("\nNhap 4 chuoi bat ky: \n");
for (i = 0; i < size; i++) {
scanf("%s", s[i]);
}
// sap xep chuoi
for (i = 1; i < size; i++) {
for (j = 1; j < size; j++) {
if (strcmp(s[j - 1], s[j]) > 0) {
strcpy(t, s[j - 1]);
strcpy(s[j - 1], s[j]);
strcpy(s[j], t);
}
}
}
printf("\nSap xep thu tu cua cac chuoi:");
for (i = 0; i < size; i++) {
printf("\n%s", s[i]);
}
return(0);
}
CÂU HỎI TỰ KIỂM TRA
Câu 1: Em hãy nêu ra một vài ví dụ về bài toàn tìm kiếm trong thực tế.
Trả lời:
- Tìm kiếm sản phẩm trong cơ sở dữ liệu của một trang thương mại điện tử.
- Tìm kiếm thông tin liên hệ của một người trong danh sách khách hàng của một doanh nghiệp.
- Tìm kiếm một file hoặc thư mục trong hệ thống tệp của máy tính.
- Tìm kiếm các bản ghi trong cơ sở dữ liệu y tế để tìm kiếm bệnh nhân cần điều trị.
- Tìm kiếm các bản ghi trong cơ sở dữ liệu của một trang tuyển dụng để tìm kiếm ứng viên phù hợp.
Câu 2: Theo em, với dãy đã sắp thứ tự và cho một số x cụ thể
- a) Trường hợp nào tìm kiếm tuần tự nhanh hơn tìm kiếm nhị phân?
- b) Về trung bình thuật toán tìm kiếm tuần tự hay thuật toán tìm kiếm nhị phân tốt hơn?
Trả lời:
- a) Ví dụ một bài toán tìm kiếm trong thực tế: Giáo viên muốn tìm tên bạn Chung trong danh sách lớp sau:
Các bước thực hiện thuật toán tìm kiếm nhị phân cho bài toán trên:
- Bước 1: Xét vị trí ở giữa dãy, đó là vị trí số 5
- Bước 2: Xét vị trí ở giữa của nửa đầu của dãy là vị trí số 3
- Vì sau bước 2 đã tìm thấy tên học sinh nên thuật toán kết thúc.
- b) Thuật toán tìm kiếm nhị phân
- Thuật toán tìm kiếm nhị phân thu hẹp được phạm vi tìm kiếm chỉ còn tối đa là một nửa sau mỗi lần lặp. Thuật toán chia bài toán thành những bài toán nhỏ hơn giúp tăng hiệu quả tìm kiếm.
Thuật toán tuần tự
- Mô tả thuật toán phải cụ thể, rõ ràng, đầy đủ, đầu vào là gì, đầu ra là gì và chỉ rõ sự kết thúc thuật toán.
- Cần mô tả thuật toán cho tốt thì người máy hay máy tính mới hiểu đúng và thực hiện được.
- Nếu không, kết quả thực hiện thuật toán có thể không như mong đợi.