Trang chủ Lớp 11 Tin học Giải SBT Tin học 11 Cánh diều Bài 7. Lập trình giải bài toán tìm kiếm

Giải SBT Tin học 11 Cánh diều Bài 7. Lập trình giải bài toán tìm kiếm

Giải SBT Tin học 11 Cánh diều Bài 7. Lập trình giải bài toán tìm kiếm

  • 41 lượt thi

  • 5 câu hỏi

  • 0 phút

Danh sách câu hỏi

Câu 1:

22/07/2024

Theo em, tại sao em không thể áp dụng thuật toán tìm kiếm nhị phân trên một dãy chưa được sắp xếp theo thứ tự?

Xem đáp án

Với một dãy chưa được sắp xếp theo thứ tự, ta không có đủ cơ sở để loại bỏ một nửa dãy số ra khỏi phạm vi tìm kiếm sau khi so sánh phần tử giữa với giá trị x cần tìm.


Câu 2:

22/07/2024

Em hãy chỉ ra một trường hợp mà thuật toán tìm kiếm tuần tự cho ra kết quả nhanh hơn thuật toán tìm kiếm nhị phân.

Xem đáp án

Với dãy a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] và khoá r = 1, thuật toán tìm kiếm tuần tự chỉ mất một lượt so sánh để tìm ra x trong dãy a, còn thuật toán tìm kiếm nhị phân phải mất ba lần chia đôi dãy mới thu hẹp được phạm vi tìm kiếm về phần tử 1 ở vị trí ngoài cùng bên trái của a.


Câu 5:

13/07/2024

Bản đồ gene

Các nhà khoa học vừa phát hiện ra bản đồ gene của một loài sinh vật trên Trái Đất có nguồn gốc từ rất lâu về trước (niên đại được xác định dựa trên các dấu vết khảo cổ học). Chuỗi gene di truyền của nó được biểu diễn bởi xâu kí tự S (chỉ gồm các kí tự A..Z). Nhằm đánh giá, nghiên cứu nó, họ muốn xem thử nó có đặc tính T hay không. T cũng được biểu diễn dưới dạng một xâu kí tự (với các kí tự A..Z), tương ứng với một đoạn gene. Người ta cho rằng, loại sinh vật này có tính chất T nói trên nếu chuỗi biểu diễn của T là một chuỗi con của S. Tức là, nếu ta lấy ra các kí tự liên tiếp của S tại vị trí nào đó thì có được T. Em hãy lập trình giải quyết bài toán trên. Dữ liệu: Nhập từ thiết bị vào chuẩn:

• Dòng đầu tiên chứa xâu S.

• Dòng thứ hai chứa xâu T.

Kết quả: Hiển thị ở thiết bị ra chuẩn các số nguyên là những vị trí mà ta tìm thấy được T ở trong S.

Bản đồ gene Các nhà khoa học vừa phát hiện ra bản đồ gene của một loài sinh vật trên Trái Đất có nguồn gốc từ rất lâu về trước (ảnh 1)
Xem đáp án

Áp dụng lát cắt danh sách, việc cài đặt khá đơn giản.

S = input ()

T = input ()

for i in range (len (S) - len (T) + 1):

if T == S[i: i+len (T)]:

print (i+1, end = " ")

Mở rộng: Trong thực tế, thuật toán trên chưa đủ hiệu quả, vì việc so sánh hai xấu có độ phức tạp là len(T). Vậy độ phức tạp của thuật toán trên là len(S) x len(T) trong trường hợp xấu nhất. Áp dụng tư tưởng làm mịn dần thuật toán, người ta đã phát minh ra các thuật toán so khớp xâu:

– Hash (thường gặp trong mật mã học – cryptography).

– KMP (tận dụng những kí tự đã được so sánh trước đó để không phải so sánh lại từ đầu).

- Z function.

Em có thể tìm đọc để tăng thêm niềm đam mê với thuật toán.


Bắt đầu thi ngay